При использовании == для примитива и упакованного значения выполняется автобокс или распаковка завершена

Следующий код компилируется (с Java 8):

Integer i1 = 1000;
int i2 = 1000;
boolean compared = (i1 == i2);

Но что это делает?

распаковыватьi1:

boolean compared = (i1.intvalue() == i2);

или коробкаi2:

boolean compared = (i1 == new Integer(i2));

Так это сравнивает дваInteger объекты (по ссылке) или дваint переменные по значению?

Обратите внимание, что для некоторых чисел сравнение ссылок даст правильный результат, поскольку класс Integer поддерживает внутренний кэш значений между-128 в127 (см. также комментарий TheLostMind). Вот почему я использовал1000 в моем примере и почему я специально спрашиваю о распаковке / боксе, а не о результате сравнения.

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

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