Niespójne zachowanie na Java ==

Rozważ ten kod:

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

Drukuje:

false
true
false

Rozumiem pierwszyfalse, operator == sprawdza tylko, czy dwa odwołania działają na tym samym obiekcie, co w tym przypadku nie jest.

Następującetrue ifalse każ mi drapać się po głowie. Dlaczego Java powinna brać pod uwagęi3 ii4 równy alei1 ii2 różne? Oba zostały zapakowane do liczby całkowitej, nie powinnyobie ocenić na false? Czy istnieje praktyczny powód tej niespójności?

questionAnswers(7)

yourAnswerToTheQuestion