Só para complementar o que falei, ainda no fim do método toString, existe o retorno de uma nova instância de String. O == compara referências e no caso não seriam as mesmas pois são duas instâncias diferentes.
----- Original Message -----
Sent: Tuesday, October 15, 2002 1:06 PM
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
     * #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
(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
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.

Responder a