Выбор ответа Senior Современная Java: record, sealed обновлено
switch и null
Вопрос
Что произойдёт в Java 21 при switch (obj) { case String s -> ...; default -> ...; }, если obj == null?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: NullPointerException: null не попадает в default без case null. По историческим причинам switch бросает NPE на null, и default его не ловит.
Варианты ответа
- Сработает ветка default, потому что null не является String
- NullPointerException: null не попадает в default без
case nullправильный ответ - Сработает ветка
case String s, и внутри будетs == null - Ошибка компиляции: switch по Object требует
case null
Разбор
По историческим причинам switch бросает NPE на null, и default его не ловит. В Java 21 можно явно обработать: case null -> ... или case null, default -> .... Паттерн String s null не сопоставляется. Код компилируется.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
sealed, enum или обычная иерархия
Следующий вопрос
Что выведет: switch с pattern matching
Термины по теме
Ещё по теме «Современная Java: record, sealed»
- switch-выражение с yield
- Pattern matching
- record
- LTS-версии Java
- Фича и версия Java
- Guard в switch
- Наследование record
- Что генерирует record