if, else if, else
public class Grades { public static void main(String[] args) { int score = 78; if (score >= 90) { System.out.println("Отлично"); } else if (score >= 75) { System.out.println("Хорошо"); } else if (score >= 50) { System.out.println("Удовлетворительно"); } else { System.out.println("Неудовлетворительно"); } }}Условие должно иметь тип boolean. Конструкции вида if (x) для числа в Java не работают.
Если в блоке одна инструкция, скобки можно опустить, но лучше их оставлять.
Вложенные условия
public class Nested { public static void main(String[] args) { int age = 25; boolean hasLicense = true; if (age >= 18) { if (hasLicense) { System.out.println("Можно водить"); } else { System.out.println("Нужны права"); } } else { System.out.println("Слишком молод"); } }}Читаемее объединить условия через && или использовать ранний выход.
Сравнение строк
public class StringCompare { public static void main(String[] args) { String answer = "да"; if (answer.equals("да")) { System.out.println("Согласие"); } if (answer.equalsIgnoreCase("ДА")) { System.out.println("Согласие без учета регистра"); } }}Классический switch
public class OldSwitch { public static void main(String[] args) { int day = 3; switch (day) { case 1: System.out.println("Понедельник"); break; case 2: System.out.println("Вторник"); break; case 3: System.out.println("Среда"); break; default: System.out.println("Другой день"); } }}Без break выполнение «проваливается» в следующую ветку.
Современный switch
С Java 14 доступна стрелочная форма без проваливания:
public class NewSwitch { public static void main(String[] args) { int day = 6; switch (day) { case 1, 2, 3, 4, 5 -> System.out.println("Будний день"); case 6, 7 -> System.out.println("Выходной"); default -> System.out.println("Нет такого дня"); } }}switch как выражение
switch может возвращать значение:
public class SwitchExpression { public static void main(String[] args) { String month = "FEBRUARY"; int days = switch (month) { case "JANUARY", "MARCH", "MAY", "JULY", "AUGUST", "OCTOBER", "DECEMBER" -> 31; case "APRIL", "JUNE", "SEPTEMBER", "NOVEMBER" -> 30; case "FEBRUARY" -> 28; default -> throw new IllegalArgumentException("Неизвестный месяц: " + month); }; System.out.println(days); }}Для нескольких инструкций в ветке используйте блок и yield:
public class SwitchYield { public static void main(String[] args) { int score = 85; String grade = switch (score / 10) { case 10, 9 -> "A"; case 8 -> { String result = "B"; yield result; } case 7 -> "C"; default -> "F"; }; System.out.println(grade); }}Что можно использовать в switch
byte, short, char, int, их обертки, String, enum. Начиная с Java 21 — и произвольные объекты с шаблонами.
Pattern matching для instanceof
public class PatternInstanceof { public static void main(String[] args) { Object value = "Привет"; if (value instanceof String text && text.length() > 3) { System.out.println(text.toUpperCase()); } }}Переменная text объявляется прямо в условии.
Pattern matching в switch (Java 21)
public class PatternSwitch { static String describe(Object obj) { return switch (obj) { case null -> "null"; case Integer i when i > 100 -> "большое число " + i; case Integer i -> "число " + i; case String s -> "строка длиной " + s.length(); default -> "что-то другое"; }; } public static void main(String[] args) { System.out.println(describe(5)); System.out.println(describe(500)); System.out.println(describe("abc")); System.out.println(describe(2.5)); }}Ключевое слово when добавляет дополнительное условие к шаблону.
