���� 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-----
De: Michel [mailto:[EMAIL PROTECTED]]
Enviada em: ter�a-feira, 15 de outubro de 2002 11:36
Para: [EMAIL PROTECTED]
Assunto: [java-list] Inst�ncias

 

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.

Responder a