switch
Выбирает ветку по значению; в форме выражения возвращает результат.
Доступно с: Java 1.0
Синтаксис
switch (value) { case A -> …; case B, C -> …; default -> … }Примеры
Switch-выражение со стрелками — без break и «проваливания»:
void main() {
String day = "SAT";
String type = switch (day) {
case "SAT", "SUN" -> "weekend";
case "MON", "TUE", "WED", "THU", "FRI" -> "weekday";
default -> "unknown";
};
IO.println(type);
}Результат:
weekendОбразцы типов и условие when (Java 21):
String describe(Object o) {
return switch (o) {
case null -> "null";
case Integer i when i < 0 -> "negative int";
case Integer i -> "int " + i;
case String s -> "string of length " + s.length();
default -> "something else";
};
}
void main() {
IO.println(describe(-5));
IO.println(describe(8));
IO.println(describe("hi"));
IO.println(describe(null));
}Результат:
negative int
int 8
string of length 2
nullСтарая форма с двоеточием: без break выполнение идёт в следующую ветку:
void main() {
int level = 1;
switch (level) {
case 1:
IO.println("level 1");
case 2:
IO.println("level 2");
break;
default:
IO.println("other");
}
}Результат:
level 1
level 2Примечания
switch работает с int и меньшими целыми, char, String, enum и (с Java 21) с любыми объектами через образцы типов. Switch-выражение должно покрывать все варианты: для строк и чисел нужен default, для enum и sealed-иерархий его можно не писать, если перечислены все значения.
См. также
- yield — Возвращает значение из блока внутри switch-выражения.
- if / else — Выполняет блок кода, только если условие истинно.
- enum — Объявляет перечисление — тип с фиксированным набором значений.
- sealed / permits — Ограничивает список классов, которым разрешено наследоваться от класса или реализовывать интерфейс.
- instanceof — Проверяет, является ли объект экземпляром типа, и сразу даёт переменную этого типа.
Вопросы и ответы по теме
В учебнике
- switch — Оператор switch в Java: стрелочные метки, несколько значений в case, switch-выражение с возвратом значения, yield и классическая форма с break.