Comportamiento inconsistente en 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 );
   }
}

Se imprime:

false
true
false

Entiendo lo primerofalse, el operador == solo comprueba si dos referencias están trabajando en el mismo objeto, que en este caso no lo están.

El seguimientotrue yfalse hazme rascarme la cabeza ¿Por qué consideraría Java?i3 yi4 igual peroi1 yi2 ¿diferente? Ambos han sido envueltos a Integer, no deberíanambos evaluar a falso? ¿Hay alguna razón práctica para esta inconsistencia?

Respuestas a la pregunta(7)

Su respuesta a la pregunta