Следующий код компилируется (с Java 8):
Integer i1 = 1000;
int i2 = 1000;
boolean compared = (i1 == i2);
Но что он делает?
Unbox i1
:
boolean compared = (i1.intvalue() == i2);
или поле i2
:
boolean compared = (i1 == new Integer(i2));
Так что он сравнивает два объекта Integer
(по ссылке) или две переменные int
по значению?
Обратите внимание, что для некоторых чисел сравнительное сравнение даст правильный результат, потому что класс Integer поддерживает внутренний кеш значений от -128
до 127
(см. также комментарий TheLostMind). Вот почему я использовал 1000
в своем примере и почему я специально задаю вопрос о распаковке/боксе, а не о результатах сравнения.