Coisa estranha com Integer

Olá.

Gostaria de saber porque isto ocorre:

[code]
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");
}

}[/code]

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!

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

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

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’.

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!