Entero clase contenedora y == operador – ¿dónde se especifica el comportamiento?

Integer integer1 = 127; Integer integer2 = 127; System.out.println(integer1 == integer2);//true integer1 = 128; integer2 = 128; System.out.println(integer1 == integer2);//false 

Descubrí que devuelve == (si lo está) bajo el rango de -128 - 127 , ¿por qué hay tal especificación?

Debido a este código en Integer.valueOf(int) :

 public static Integer valueOf(int i) { if(i >= -128 && i <= IntegerCache.high) return IntegerCache.cache[i + 128]; else return new Integer(i); } 

Explicación:

Integer integer1 = 127 es un atajo para Integer integer1 = Integer.valueOf(127) , y para valores entre -128 y 127 (inclusive), los enteros se colocan en un caché y se devuelven varias veces, mientras que los números más altos y más bajos generan nuevos enteros cada vez.

== devolverá verdadero si es exactamente el mismo objeto. Los números enteros del boxeo en números “internos” de Java dentro de ese rango, por lo que cualquier versión encuadrada de dicho número dará como resultado exactamente el mismo objeto.

Para evitar este efecto en las comparaciones, use .equals ()

 System.out.println(integer1.equals(integer2)); 
    Intereting Posts