Seguinte, estou estudando para certificação e estou com algumas duvidas…
Este código abaixo, ele true, pois os enderecos de memoria são iguais para os 2. certo?
String x = "Teste";
String y = "Teste";
String a = new String("Teste2");
//a = y;
System.out.println(x == y);
Neste 2º caso, ele será falsa, pois cria um novo endereco de memória.
String x = "Teste";
String y = "Teste";
String a = new String("Teste");
System.out.println(x == a);
Neste 3º exemplo ele me retorna true, o certo não seria, naquela atribuição a = y eu dizer que o valor de y (teste) passa a ser o mesmo valor de a que antes erá (teste2)…
String x = "Teste";
String y = "Teste";
String a = new String("Teste2");
a = y
System.out.println(y == a);
o que ele esta fazendo é atribuindo o mesmo endereco de memoria do y em a, como faço para mudar apenas o valor e não o endereço… :?
O que vc disse está correto… mas String são imutaveis, ou seja se vc alterar o conteúdo de y
String x = "Teste";
String y = "Teste";
String a = new String("Teste2");
a = y;
System.out.println(y == a);
y = "Teste2";
System.out.println(y == a); // retorna false
Pq a String “Teste2” foi criada em outro endereço de memoria, y está com conteúdo “Teste2” e a está com “Teste”
Notem que s1.equals(s2) eh verdadeiro por causa do infame String.intern() que o compilador ja faz pra voce em todas as Strings embutidas no codigo-fonte.