Comportamento inconsistente no java ==
Considere este código:
class test {
public static void main(String[] args) {
test inst_test = new test();
int i1 = 2000;
int i2 = 2000;
int i3 = 2;
int i4 = 2;
Integer Ithree = new Integer(2); // 1
Integer Ifour = new Integer(2); // 2
System.out.println( Ithree == Ifour );
inst_test.method( i3 , i4 );
inst_test.method( i1 , i2 );
}
public void method( Integer i , Integer eye ) {
System.out.println(i == eye );
}
}
Imprime:
false
true
false
Eu entendo o primeirofalse
, o operador == verifica apenas se duas referências estão trabalhando no mesmo objeto, o que, nesse caso, não é.
Os seguintestrue
efalse
Me faz coçar minha cabeça. Por que Java considerariai3
ei4
igual masi1
ei2
diferente? Ambos foram envolvidos em Integer, não deveriamambos avaliar para falso? Existe uma razão prática para essa inconsistência?