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