Nao entendi!

3 respostas
J

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!

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");
		}
	}
}

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

3 Respostas

R

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…

M

“jfbarro”:
As 3 referencias nao teriam que apontar para o mesmo objeto String?

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.

S

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

Criado 6 de junho de 2005
Ultima resposta 1 de jul. de 2005
Respostas 3
Participantes 4