E ai Galera!
Bom… sabemos que uma String é um objeto e deve ser comparada usando equals? ok?
Então expliquem para mim porque a linha 6 imprime true!
1. String s1 = new String("Dennys");
2. String s2 = new String("Dennys");
3. String s3 = "Dennys";
4.
5. System.out.println( s1 == s2 );
6. System.out.println( s3 == "Dennys" );
O X da questão é qual a diferença entre declarar uma string assim:
String s1 = new String("Dennys");
e uma outra string assim:
String s3 = "Dennys";
Valeu…
Atn.
Dennys Fredericci
se eu naum me engano quando vc executa:
String s = new String("Dennys");
String s2 = new String("Dennys");
vc tem 2 objetos Strings alocados na memória.
agora quando vc faz
String s = "Dennys";
String s2 = "Dennys";
vc utiliza a mesma referência em memória.
como o renan disse, o lance é o seguinte, em Java, existe um pool de strings q a JVM mantém… bem, vejamos, strings são objetos usados pelo programa todo, e consomem memória afuzel… quando tu faz isso:
vc esta instanciando um novo objeto string e colocando ele no pool… para q, quando outra referencia de string receber o valor “portal java”, faça uma referencia pra esse mesmo objeto (isto é pra nao disperdiçar memória, ele usa o mesmo objeto pra instancias diferentes), ex:
[code]String s2 = "portal java";
System.out.println( s1 == s2 );[/code]
esse código imprime “true”… pq, quando eu digo pra ele atribuir “portal java” a referencia s2, ele procura no pool por uma string com esse valor, e atribuir… É POR ISSO Q STRINGS SÃO IMUTÁVEIS… imagina se agora, eu mudo o valor “portal java” de s2 para “eu amo o portal java”, … s1 passaria a referenciar o mesmo objeto??? Não, se isso acontecesse, seria um baita erro… bem, e se eu fizer isso aqui:
ele vai estar criando um OUTRO objeto string, e não vai usar o q esta no pool… pq? pq vc esta dizendo explicitamente q será uma string nova, usando o operador new…
há diferenças na prática? Eu diria q não… strings são imutáveis…
Ae Matheus… sempre iluminando o nosso caminho heim! Vlw… essa eu nao sabia…
eu já chamo de Sun Certified Programer! heheh
soh completando, a string soh vai pro pool qndo ela eh criada com dessa forma:
minhaString = "portal java";
se vc fizer:
String s1 = "portal java";
String s2;
String s3 = "eu amo ";
s1 = s3 + s1;
s2 = s3 + s1;
System.out.println(s1 == s2);
vai retornar false…
e nunca se deve criar uma string desse jeito:
String s = new String("portal java");
pq dai como vc ta forcando a criar um novo objeto, vai estar gastando mais memoria…