Isso acontece porque o compilador, para otimização, registra todas as string literais como constantes, e são únicas, ou seja, todas as Strings “Teste” da sua classe serão uma única constante. No primeiro caso, (new String(“Teste”)), você estará criando um novo objeto com esse conteúdo, enquanto que no segundo (= “Teste”), você estará apenas assinalando uma referência, sendo assim, será realmente o mesmo objeto. Deu para entender?
Abraço,
Armando
cassio
Pelo que entendi a JVM trata todas as strings como instâncias da classe java.lang.String. Logo, não há diferença entre declarar
Stringstr1=newString("Teste");
ou
Stringstr3="Teste";
Ambas as maneiras geram objetos do tipo String. Entretanto, como vc criou um objeto str2 com o valor “Teste”, quando fez String str3 = “Teste” a JVM associou str3 ao endereço de memória da instância str2, já que as duas teriam EXATAMENTE O MESMO VALOR. Isso é uma economia de mmória, e também é perfeitamente seguro, já que a classe String é imutável por natureza.
eric_jf
para comparar vc deve usar o metodo equals
String teste = new Teste("Teste");
String teste2 = "Teste";
teste2.equals(teste);
publicclassTeste{publicstaticvoidmain(String[]args){Stringstr2="Teste";Stringstr3="Teste";System.out.println(str2==str3);// Da trueSystem.out.println(str2+" "+str3);// Teste Testestr2="Teste2";System.out.println(str2==str3);// Dai sim falseSystem.out.println(str2+" "+str3);// Teste2 Teste}}
Isso é meio estranho e chato de entender
A
armando
Não, você está errado pelo seguinte: String é um objeto imutável. Portanto, quando você faz str2 = “Teste2”, está apontando a referência para outro objeto, e não alterando o conteúdo do objeto. Por isso, str1, que é outra referência, não é alterado.