Comparando string

Estava fazendo uns testes e me deparei com isso, e não conseguir entender o porque.
A saída é true, false, true. Não deveria ser tudo false?
Alguém poderia me explicar o porque?
Obrigado

String s1 = "A";
String s2 = "A";		

System.out.println(s1 == s2);
System.out.println("s1 == s2: " + s1 == s2);
System.out.println((s1 == s2));

Eu mesmo perguntei e eu mesmo vou responder :smile:
As linhas 1 e 3 é porque strings criadas sem o operador new ficam no pool de strings, como elas tem o mesmo valor, ambas apontam para o mesmo endereço de memória. Se tivesse criado uma delas com o operador new, este estaria apontando para outro endereço e a saída seria false.
Mas a linha 2 não consegui descobrir. Porque é false?. Se alguém ai souber, ficaria muito grato.
Obrigado

1 curtida

esquece gente!!! Já sei… :slight_smile: acho que é o sono

Motivo:

    //contatenação antes da comparação, por isso é false -> "s1 == s2: A" == s2
    System.out.println("s1 == s2: " + s1 == s2);

Ajustado:

//os parênteses indicam a precedência da execução
System.out.println("s1 == s2: " + (s1 == s2))

Recomendado, utilizar equals para comparação de String.

1 curtida