Для чего используются классы-обёртки (Wrapper) в Java?

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

Ответ

Классы-обёртки (Integer, Double, Boolean и др.) используются для представления примитивных типов данных как объектов. Основные сценарии применения:

1. Хранение в коллекциях и использование с Generics Коллекции и обобщённые типы (List<T>, Map<K,V>) работают только с объектами.

List<Integer> numbers = new ArrayList<>();
numbers.add(42); // Автоупаковка int -> Integer

2. Возможность использования null Обёртки могут иметь значение null, что полезно для представления отсутствующего значения.

Integer result = findValue(); // Может вернуть null
if (result != null) {
    int value = result; // Автораспаковка
}

3. Использование утилитных методов Каждый класс-обёртка предоставляет полезные статические методы.

int num = Integer.parseInt("100");
String hex = Integer.toHexString(255); // "ff"
int max = Integer.MAX_VALUE;

4. Работа с рефлексией и аннотациями Эти механизмы часто требуют объектных типов.

5. Синхронизация (редко) — объекты можно использовать в качестве мониторов.

Автоупаковка (autoboxing) и автораспаковка (unboxing) автоматически преобразуют примитивы в обёртки и обратно, начиная с Java 5.