Как работает автоупаковка при присваивании значения объекту Integer?

«Как работает автоупаковка при присваивании значения объекту Integer?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, это возможно благодаря механизму автоупаковки (autoboxing), введённому в Java 5. Компилятор автоматически преобразует примитивное значение int в объект класса-обёртки Integer.

Пример автоупаковки:

Integer number = 42; // Автоматически преобразуется в: Integer.valueOf(42)

Важное предупреждение о сравнении (==): Оператор == сравнивает ссылки на объекты, а не их значения. Из-за кэширования в диапазоне -128..127 сравнение может давать неочевидные результаты.

Integer a = 127;
Integer b = 127;
System.out.println(a == b); // true (один кэшированный объект)

Integer c = 128;
Integer d = 128;
System.out.println(c == d); // false (созданы два разных объекта)

Правильный способ сравнения: Всегда используйте метод .equals() для сравнения значений объектов-обёрток.

System.out.println(c.equals(d)); // true (сравниваются значения 128)

Автораспаковка (unboxing): Обратный процесс также работает автоматически.

Integer boxed = 100;
int primitive = boxed; // Автоматически преобразуется в: boxed.intValue()