Ответ
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, которые кэшируются).