Что произойдёт при выполнении: Integer x = null; int y = x;?
NullPointerException: int y = x компилируется в x.intValue(), а вызов метода на null — NPE. Обёртка может быть null, примитив — нет.
- Типичный источник: map.get(key), поля сущностей Integer, результаты JDBC
- Защита: getOrDefault, Objects.requireNonNullElse, примитив там, где «нет значения» бессмысленно
- Сообщение NPE в Java 14+ подскажет: Cannot invoke "Integer.intValue()"
А ещё Сравнение Integer с int через == тоже распаковывает
Подробно
int y = x компилируется в x.intValue(), а вызов метода на null даёт NullPointerException. Типичный источник — результаты, способные вернуть null (map.get(key)), присвоенные примитиву. Защита: использовать примитив там, где «отсутствие» бессмысленно; подставлять дефолт через getOrDefault / Objects.requireNonNullElse; для «значение может отсутствовать» возвращать Optional, а не nullable-обёртку.
Что хотят услышать
- Механизм распаковки.
- Где встречается и как защититься.
Частые ошибки
- Ждать дефолт 0 при распаковке null.
- Присваивать map.get(key) переменной int без проверки на null.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗y станет 0 — это значение по умолчанию для типа int
- ✗Не скомпилируется: нельзя присвоить null переменной Integer
- ✗ClassCastException: null нельзя привести к типу int
- ✓NullPointerException при распаковке null в int
Что спросят дальше
- Как getOrDefault убирает этот NPE?
- Где уместен примитив, а где обёртка в полях класса?
Разбор темы
- Примитивы, обёртки и Integer cache
Восемь примитивов и их диапазоны, autoboxing, кэш Integer и ловушка ==, NPE при распаковке и цена боксинга.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.