Coisa estranha com Integer

4 respostas
Puri

Olá.

Gostaria de saber porque isto ocorre:

public class Interface {
    
    public static void main(String args[]){
        Integer a = 2;
        Integer b = 2;
        
        if(a == b)
            System.out.println("igual");
        else
            System.out.println("diferente");
    }
}

Quando eu faço isto, aparece IGUAL, mas quando eu mudo os valores para 200 aparece [b]diferente[/b.

Alguém tem alguma idéia do que possa ser?

Valew ae!

4 Respostas

Flasoft

Puri, fui testar aqui JVM 5, nem pode-se iniciar Integer assim…
e testei int ao inves de integer e deu igual em ambos

Luiz-SP

voce ta comparando referencia de objetos e naun seu conteudo, tente usar o metodo equals para comparar.

T

Quando você usa == está comparando as referências dos objetos, não seus valores.

Quando você escreve "Integer a = 2" está na verdade escrevendo:

Integer a = Integer.valueOf (2);

Integer.valueOf (x) é igual a new Integer (x) (ou seja, cria um novo objeto) se x &lt -128 ou x &gt +127.

Integer.valueOf (x) retorna um Integer pré-alocado se x for &gt= -128 e &lt= +127.

Ou seja, quando você usou 200, criou dois objetos diferentes, então == retorna ‘false’.

Puri

Hummm

Muito obrigado pelas respostas! :smiley:

Me ajudou bastante a entender!

Quanto ao método .equals eu já sabia que tinha que ser utilizado ele, só não entendia o porquê.

Valew!

Criado 6 de outubro de 2006
Ultima resposta 7 de out. de 2006
Respostas 4
Participantes 4