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()
???
Entendendo o objeto String
4 Respostas
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.
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 ???
Eles passam a apontar para objetos diferentes.
s1 aponta para o novo objeto "y" e s2 continua apontando para o velho "x".
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.