Pessoal,
 
Tem muito mais coisas envolvidas nisso...
O fato da primeira comparação ter dado TRUE é pura coinscidência, tanto
poderia como não poderia ter dado TRUE.
A questão é como o Java aloca os objetos na memória e acaba reutilizando
objetos iguais com endereços diferentes.
Vale a pena dar uma olhada no tema HEAP, procurem na WEB.
Para quem tem o Core Java vol. 1 lá tb tem boas explicações.
 

-----Original Message-----
From: Giovani Salvador [mailto:[EMAIL PROTECTED]]
Sent: terça-feira, 15 de outubro de 2002 13:07
To: [EMAIL PROTECTED]
Subject: Re: [java-list] Instâncias


Legal a questão.
Depurei o código dentro do JBuilder e dei uma olhada nas propriedades dos
objetos.
No primeiro exemplo, tudo igual, no segundo, as propriedades "Offset" e
"Value" estavam diferentes.
Em "Value" foram considerados os zero à esquerda em 9 posições, por isso deu
diferente.
 
Abaixo, o código do método toString da classe Integer. Neste código é que
deu a diferença.
 
    /**
     * Returns a <code>String</code> object representing the
     * specified integer. The argument is converted to signed decimal
     * representation and returned as a string, exactly as if the
     * argument and radix 10 were given as arguments to the {@link
<mailto:{@link> 
     * #toString(int, int)} method.
     *
     * @param   i   an integer to be converted.
     * @return  a string representation of the argument in base&nbsp;10.
     */
 
public static String toString(int i) {
 int q, r, charPos  ; 
 charPos = 12 ; 
 char buf [] = new char [charPos] ; 
 char sign = 0 ; 
 
   if (i == Integer.MIN_VALUE) {
            return "-2147483648";
        }
 
 if (i < 0) { 
  sign = '-' ; 
  i = -i ; 
 }
 
 // Generate two digits per iteration
 while ( i >= 65536 ) { 
  q = i / 100 ; 
  // really: r = i - (q * 100) ; 
  r = i - ((q << 6) + (q << 5) + (q << 2)) ; 
  i = q ; 
  buf [--charPos] = DigitOnes [r] ; 
  buf [--charPos] = DigitTens [r] ; 
 }
 
 // Fall thru to fast mode for smaller numbers
 // assert(i <= 65536, i);
 for (;;) { 
  q = (i * 52429) >>> (16+3) ; 
  r = i - ((q << 3) + (q << 1)) ;  // r = i-(q*10) ...
  buf [--charPos] = digits [r] ; 
  i = q ; 
  if (i == 0) break ; 
 }
 if (sign != 0) {
  buf [--charPos] = sign ; 
 }

 
**************************************************
Giovani Salvador
Site pessoal - http://pagina.de/siglas <http://pagina.de/siglas> 
(Siglas de informática)
PROCERGS - Cia. de Processamento de Dados do 
Estado do Rio Grande do Sul - BRASIL
Setor TSI - Tecnologia para Sistemas de Informação
ICQ #44904309
**************************************************
 

----- Original Message ----- 
From: Michel <mailto:[EMAIL PROTECTED]>  
To: [EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>  
Sent: Tuesday, October 15, 2002 11:36 AM
Subject: [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.


------------------------------ LISTA SOUJAVA ----------------------------
http://www.soujava.org.br  -  Sociedade de Usuários Java da Sucesu-SP
dúvidas mais comuns: http://www.soujava.org.br/faq.htm
regras da lista: http://www.soujava.org.br/regras.htm
historico: http://www.mail-archive.com/java-list%40soujava.org.br
para sair da lista: envie email para [EMAIL PROTECTED]
-------------------------------------------------------------------------

Responder a