|
����
A diferen�a � que no primeiro exemplo, a declara��o das duas vari�veis
String (x e y) s�o uma forma especial de inicializa��o em Java, porque os
valores � direita do operador de atribui��o s�o literais, e n�o objetos String.
Os literais tem todos os atributos e procedimentos da classe String, mas s�o
alocados, em tempo de compila��o, numa estrutura chamada "pool de Strings".
Ao serem alocados, relaciona-se um valor can�nico a cada uma dessas literais,
que visa identificar unicamente String's de valores iguais. Esse valor que
se relaciona a cada String � obtido atrav�s do m�todo "intern()",
da classe String. Quando esse m�todo � explicitamente chamado, seja numa vari�vel
String do tipo literal ou objeto, caso essa String j� se encontre no pool de
String's, o valor do pool � obtido. Caso contr�rio, se a String em quest�o
n�o estiver no pool, o m�todo intern() coloca ela no pool, e retorna a refer�ncia
atual do objeto String. Simplificando: ��� �����para quaisquer objetos s e t, da classe String,
s.intern() == t.intern(), se e somente se s.equals(t) retorna true... ��� Nas
vari�veis String do tipo literal, o m�todo intern() � "implicitamente"
chamado, sempre que necess�rio, em opera��es de compara��o, por exemplo.
Valores retornados por m�todos, como o toString() da classe Integer, n�o
retorna valores literais, e sim uma refer�ncia para o objeto String de retorno
do m�todo, que varia de acordo com posi��o alocada por esse valor na �rea de
heap da mem�ria do programa, definida e estruturada dinamicamente em tempo de execu��o. Rosfran Lins Borges Analista de Sistemas - NDS [EMAIL PROTECTED] F�ton� Inform�tica e Servi�os Fone: (61) 328 5060 R.: 272 -----Mensagem original----- Ol� galera! Para exemplificar
minha d�vida, mostrarei dois exemplos: -------------EXEMPLO 1-------------- public static void main(String
args[]) { String x =
"100"; String y =
"100"; if(x == y)
System.out.println("IGUAL!!!") } ------------EXEMPLO 2---------- public static void main(String
args[]) { String x =
"100"; String y =
Integer.toString(100); if(x == y)
System.out.println("IGUAL!!!"); } No exemplo 1, aparece na tela
"IGUAL!!!", no exemplo 2 n�o aparece nada! Sei que para comparar duas Strings
tenho o m�todo equals(String s), mas para fins de conhecimento, gostaria de
saber por qu� o 1� exemplo funciona e o 2� n�o. Obrigado. |
- RES: [java-list] Inst�ncias Rosfran Lins Borges
- RES: [java-list] Inst�ncias RVilardo
