Короткий ответ
Класс-обёртка — это ссылочный тип, который упаковывает примитив в объект: int → Integer, long → Long, char → Character, boolean → Boolean. Обёртки нужны там, где требуется объект, а не значение: коллекции и дженерики хранят только объекты. Преобразование автоматическое: автобоксинг упаковывает примитив в обёртку, распаковка делает обратное.
Как это работает подробнее
Помимо «объектности», обёртки дают полезную функциональность: константы вроде Integer.MAX_VALUE, методы преобразования Integer.parseInt("42") и Integer.valueOf(...), а также возможность хранить null для обозначения отсутствия значения.
- Автобоксинг — автоматическая упаковка примитива при присваивании или добавлении в коллекцию.
- Распаковка — автоматическое извлечение примитива; для null-обёртки даёт NullPointerException.
- Кэш значений — Integer от -128 до 127 кэшируется, поэтому == для обёрток даёт неожиданные результаты.
- Функциональность — константы, парсинг и преобразование типов, например Integer.parseInt() и valueOf().
Пример кода
WrapperDemo.java
import java.util.ArrayList;
import java.util.List;
public class WrapperDemo {
public static void main(String[] args) {
Integer i = 42; // автобоксинг: int -> Integer
int x = i; // распаковка: Integer -> int
List<Integer> nums = new ArrayList<>();
nums.add(1); // int автоматически упакован в Integer
Integer n = null;
// int y = n; // NullPointerException при распаковке null
}
}Что использовать на практике
- Используй обёртки там, где нужны null, коллекции или дженерики; в остальных случаях примитивы легче и быстрее.
- Для парсинга и преобразований применяй статические методы обёрток: parseInt(), valueOf(), parseDouble().
- Сравнивай обёртки через equals(), а не через ==.
Подводные камни
- Распаковка null-обёртки бросает NullPointerException.
- Integer кэшируется в диапазоне -128..127: == может дать true для малых и false для больших значений.
- Автобоксинг в горячих циклах создаёт лишние объекты и замедляет код.
Как отвечать на собеседовании
- Определи обёртку: объект для примитива → перечисли пары int → Integer и другие → объясни, зачем они нужны (коллекции, дженерики, null, методы) → добавь автобоксинг и распаковку → предупреди о NPE на null и кэше -128..127.