Certificação - Variaveis String

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”

deu para entender, senão posta ae…

flw

Então quer dizer…

String y = “teste”;
String x = new String(“teste2”);

x = y //atribui o endereco de y em x

imprime(x) //vai imprimir “teste”.

y = “teste2” //aqui eu estou mudando o valor de y e o endereço de memoria?

[code]String s1 = "teste";
String s2 = "teste";

s1.equals(s2) // == true;
s1 == s2 // == true;

s2 = "blabla";

s1.equals(s2) // == false;
s1 == s2 // == false;[/code]

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.