Autoboxing — это автоматическое преобразование примитивных типов (int, double и т.д.) в соответствующие им объекты-обёртки (Integer, Double и др.). Unboxing — обратное преобразование объекта-обёртки обратно в примитив.
Работает автоматически при присваивании, аргументах методов и коллекциях:
List<Integer> numbers = new ArrayList<>(); numbers.add(5); // Пример autoboxing: 5 (int) -> Integer(5) int value = numbers.get(0); // Unboxing: Integer(5) -> 5
Риски:
Может ли следующий код выбросить исключение? Почему?
Integer x = null; int y = x;
Ответ: Код выбрасывает NullPointerException, потому что при попытке выполнения int y = x; происходит unboxing из null в примитив, а null нельзя привести к int.
История
int.История
Integer как ключ для кеша, не учитывая, что значения -128...127 кэшируются, а остальные — нет. Из-за этого == внезапно начал давать неверные результаты, что привело к неправильному удалению данных из кеша.История
В REST API приходили nullable значения. Простой unboxing приходящего Integer иногда приводил к краху из-за неожиданного null вместо числа от клиента.