Короткий ответ
Класс-обёртка — это ссылочный тип, который упаковывает примитив в объект: 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, коллекции или дженерики; в остальных случаях примитивы легче и быстрее.