Entendendo o objeto String

4 respostas
S
Qual q diferença entre declarar uma string assim:





String s1, s2;


s1 = "texto";


s2 = "texto";





>> Se declaro assim quando quando testo se as suas são iguais usando o == o resultado é verdadeiro





ou assim:





String s1,s2;


s1 = new String("texto");


s2 = new String("texto");





>> Assim o resultado é falso


        Para obter um true preciso usar o .equals()





???

4 Respostas

R

Salles,



Quando você cria uma String ela é inserida em um pool de strings.



Se você criar uma segunda String com um valor que já existe no pool usando ="", a nova referência criada apontará para essa String do pool.



Assim se você comparar essas strings usando "==" o resultado sera verdadeiro.



Agora, se você criar uma segunda String com um valor ja existente no pool usando "new String()", a referência não apontará para esse que já existe, ao invés disso, um novo objeto String será criado, duplicando o objeto já existente.



Dessa maneira, se você comparar essas string usando "==" o resultado será falso, pois são objetos diferentes. Já usando "equals()" o resultado será verdadeiro.



S

Segundo essa explicação, qdo eu crio uma string usando o ="" com um valor que ja existe no tal "pool de strings" na verdade ele aponta para o mesmo obejto que ja existe… então teremos



s1 = "x"

s2 = "x"



apontando para o mesmo local… certo ???



ok, mas e se eu altero o valor de s1 … o que acontece com s2 ???



s1 = "y"





??? s2 ???

B

Eles passam a apontar para objetos diferentes.

s1 aponta para o novo objeto "y" e s2 continua apontando para o velho "x".

R

Salles,



Explicando a resposta,



Strings são imutáveis, ou seja, quando vc altera um objeto String um novo objeto é criado, se você olhar um método na API, por ex. ".toUpperCase()" o retorno será um String.



Assim, se ha duas referencias apontando para a mesma String, quando vc altera uma, a outra continua com o mesmo valor.

Criado 24 de fevereiro de 2003
Ultima resposta 24 de fev. de 2003
Respostas 4
Participantes 3