Что такое boxing и unboxing в Java?

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

Ответ

Boxing — это автоматическое преобразование примитивного типа в соответствующий объект-обертку (например, int → Integer). Unboxing — обратный процесс (например, Integer → int).

Почему это нужно? Коллекции (ArrayList, HashMap) и многие API работают только с объектами, а не с примитивами.

Примеры:

// Автоматический boxing (Java 5+)
int primitive = 42;
Integer boxed = primitive; // boxing

// Автоматический unboxing
Integer obj = 100;
int unboxed = obj; // unboxing

// Использование в коллекции
List<Integer> list = new ArrayList<>();
list.add(7); // boxing: int → Integer
int value = list.get(0); // unboxing: Integer → int

Важные нюансы:

  • Производительность: Каждый boxing создает новый объект, что может привести к накладным расходам в циклах.
  • NullPointerException: При попытке unboxing значения null.
    Integer nullable = null;
    int num = nullable; // NullPointerException!
  • Сравнение: Для объектов-оберток используйте .equals(), а не == (кроме значений в диапазоне -128..127 для Integer, которые кэшируются).