Vc deve sempre se lembrar que strings em Java são instâncias da classe
String, logo são objetos como quaisquer outros.

x e y, no seu exemplo, são referências para objetos String.  Quando vc
cria constantes String, a maioria dos compiladores Java compartilha
constantes string no mesmo endereço, logo as referências ficam iguais.

Nos seu primeiro exemplo, as duas constantes são compartilhadas na mesma
posição de memória, pois se tratam da mesma constantes string, logo x e
y são iguais.

No segundo exemplo, como vc usa Integer.toString(100), o compilador não
tenta compartilhar o endereço, e armazena a string em uma posição de
memória diferente, logo x e y têm valores diferentes.

Por isso que só funciona bem a comparação de strings usando
"x.equals(y)", porque o operador "==" compara não o conteúdo das
strings, mas o valor de suas referências.

Em Ter, 2002-10-15 às 11:36, Michel escreveu:
> 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.

Atenciosamente,
-- 
Itamar Almeida de Carvalho
Desenvolvimento de Sistemas
[EMAIL PROTECTED] - (+85) 281-2223
Oktiva Telecomunicações e Informática Ltda
http://www.oktiva.com.br

Attachment: signature.asc
Description: PGP signature

Responder a