Nao entendi!

Ola Pessoal!!

Fazendo alguns testes aqui, cheguei a esse codigo que me deixou confuso!! Eu sei que existe o pool de Strings, e por isso mesmo fiquei confuso! As 3 referencias nao teriam que apontar para o mesmo objeto String? Sendo assim qualquer comparacao entre elas deveria retorna true! Estranho!

[code]public class Estranho {
public static void main(String[] args){
String s1 = "abcd";
String s2 = "abcd";
String s3 = "ab";
s3 = s3 + "cd";

	System.out.println("S1:" + s1);
	System.out.println("S2:" + s2);
	System.out.println("S3:" + s2);

	if (s1 == s2){
		System.out.println("Referencias de S1 igual S2");
	}

	if (s1 == s3){
		System.out.println("Referencias de S1 igual S3");
	}

	if (s2 == s3){
		System.out.println("Referencias de S2 igual S3");
	}

	if (s1.equals(s2)){
		System.out.println("Conteudo de S1 igual S2");
	}

	if (s1.equals(s3)){
		System.out.println("Conteudo de S1 igual S3");
	}

	if (s2.equals(s3)){
		System.out.println("Conteudo de S2 igual S3");
	}
}

}[/code]

O resultado aqui na minha máquina é esse:

S1:abcd
S2:abcd
S3:abcd
Referencias de S1 igual S2
Conteudo de S1 igual S2
Conteudo de S1 igual S3
Conteudo de S2 igual S3

Obrigado

cara… naum tenho muita certeza… mas acredito que por iniciar a String s3 com apenas “ab”, ele não utiliza o mesmo pool…

PS: Não tenho certeza…

[quote=“jfbarro”]As 3 referencias nao teriam que apontar para o mesmo objeto String?
[/quote]
Não. :slight_smile:

Vejamos:

String s1 = "abcd";
String s2 = "abcd";
String s3 = "ab";
s3 = s3 + "cd";

s1 e s2 vão apontar para o mesmo objeto no pool. Agora, com relação a s3, é isso oque o compilador vai fazer ao concatenar s3 + “cd”:

Sacou? Ele vai instanciar um novo objeto String, porém com o mesmo valor de s1 e s2.

pois pode ter certeza renan_daniel…

quando voce faz “cd”// isso eh uma nova string na pool
s3 (“ab”) // eh uma outra nova string na pool

quando voce ajunta as duas formam outra nova string na pool