Выбор ответа 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 его не ловит.

Варианты ответа

  1. Сработает ветка default, потому что null не является String
  2. NullPointerException: null не попадает в default без case nullправильный ответ
  3. Сработает ветка case String s, и внутри будет s == null
  4. Ошибка компиляции: switch по Object требует case null

Разбор

По историческим причинам switch бросает NPE на null, и default его не ловит. В Java 21 можно явно обработать: case null -> ... или case null, default -> .... Паттерн String s null не сопоставляется. Код компилируется.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме