Duplicar posible:
Inconsistent behavior on java's ==
Integer wrapper objects share the same instances only within the value 127?java para == Entero
He encontrado el siguiente comportamiento == para objetos enteros y no llego a entenderlo. (Soy muy consciente de que se debe usar es igual para tales comparaciones, pero estoy estudiando para OCPJP ...)
En resumen, == funciona como se espera para el 1000, pero no para 10.
El primero fragmento de código es:
Integer i1 = 1000;
Integer i2 = 1000;
if(i1 != i2) System.out.println("different objects");
if(i1.equals(i2)) System.out.println("meaningfully equal");
y se comporta como cabría esperar:
different objects
meaningfully equal
Este último sin embargo:
Integer i3 = 10;
Integer i4 = 10;
if(i3 == i4) System.out.println("same object");
if(i3.equals(i4)) System.out.println("meaningfully equal");
tiene el siguiente resultado:
same object
meaningfully equal
Por favor alguien puede explicar por qué ocurre esto?
Por cierto Pruebe con '-XX: + AggressiveOpts' y el primero que se comportará como el segundo, como aumenta el tamaño de la memoria caché Integer. ;) –