Непоследовательное поведение на Java ==

Рассмотрим этот код:

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 );
   }
}

Это печатает:

false
true
false

Я понимаю первоеfalseоператор == только проверяет, работают ли две ссылки на один и тот же объект, что в этом случае не так.

Следующиеtrue а такжеfalse заставь меня почесать голову. Почему бы Java рассмотретьi3 а такжеi4 равный ноi1 а такжеi2 разные? Оба были обернуты в Integer, не должныboth оценивать как ложное? Есть ли практическая причина этого несоответствия?

Ответы на вопрос(7)

Ваш ответ на вопрос