Условные операторы if и if-else в Java
Условный оператор if — самый используемый оператор ветвления в Java: без него сложно написать хоть сколько-нибудь полезную программу. Он направляет выполнение программы по одной из двух (или нескольких) ветвей в зависимости от того, истинно условие или ложно.
Оператор if в Java
Общая форма записи оператора if:
if (booleanExpression) {
System.out.println("In the if block");
} Выражение booleanExpression должно возвращать логическое значение типа boolean или Boolean — например, результат сравнения. Если оно равно true, выполняется блок кода в фигурных скобках. Если false — блок пропускается, и выполнение продолжается после закрывающей скобки.
Следующий пример демонстрирует использование оператора if:
public class IfExample {
public static void main(String[] args) {
int a = 1;
if (a < 10) {
System.out.println("In the if block");
}
}
} Оператор if-else
У оператора if есть вторая форма — с блоком else. Если booleanExpression возвращает false, выполняется блок кода, записанный после else:
if (booleanExpression) {
System.out.println("Inside if block");
} else {
System.out.println("Inside else block");
} Следующий пример показывает оператор if-else в действии:
public class IfElseExample {
public static void main(String[] args) {
int a = 1;
if (a == 10) {
System.out.println("In the if block");
} else {
System.out.println("In the else block");
}
}
} Блок кода после if и после else может содержать несколько команд.
Важно
Фигурные скобки необязательны, если ветка состоит ровно из одной команды, — такой код скомпилируется. Однако соглашения Oracle по оформлению кода рекомендуют ставить скобки всегда: это защищает от незаметных ошибок, когда в ветку позже дописывают вторую строку.
Лесенка if-else-if
Форма if-else-if — частный случай конструкции if-else. У оператора if может быть ноль или несколько блоков else if, которые должны идти перед необязательным завершающим else. Условия проверяются сверху вниз: как только одно из них оказывается истинным, выполняется его блок, а оставшиеся else if и else уже не проверяются.
Рассмотрим на примере определения времени года: условия внутри каждой ветки объединены логическим оператором || (ИЛИ):
public class IfElseExample1 {
public static void main(String[] args) {
int month = 4; // April
String season;
if (month == 12 || month == 1 || month == 2) {
season = "Winter";
} else if (month == 3 || month == 4 || month == 5) {
season = "Spring";
} else if (month == 6 || month == 7 || month == 8) {
season = "Summer";
} else if (month == 9 || month == 10 || month == 11) {
season = "Autumn";
} else {
season = "Not a Month";
}
System.out.println("April is in the " + season + ".");
}
} Результат выполнения кода:
April is in the Spring. Какую форму выбрать
| Форма | Структура | Когда использовать |
|---|---|---|
if | Одно условие, один блок | Выполнить код только при истинном условии; иначе не делать ничего |
if-else | Одно условие, две ветки | Выбрать одну из ровно двух альтернатив |
if-else-if | Несколько условий, проверяемых сверху вниз | Выбрать одну ветку из многих по разным условиям |
switch | Одно значение сравнивается с константами | Много веток, каждая из которых сравнивает одну и ту же переменную с константой |
Есть и краткая запись: когда if-else лишь выбирает одно из двух значений, его можно заменить тернарным оператором ?: — например, int max = (a > b) ? a : b; вместо четырёх строк if-else.
На чём чаще всего ошибаются
- Точка с запятой сразу после условия:
if (a > 5);компилируется, но точка с запятой — это пустая команда, и блок ниже выполнится в любом случае. - Пропуск фигурных скобок у однострочной ветки: при добавлении второй строки она незаметно оказывается вне ветки. Всегда ставьте
{}. - Сравнение объектов через
==: дляStringи других объектов в условиях используйтеequals(); оператор==сравнивает ссылки. Booleanсо значениемnull: если в условии стоит обёрткаBoolean, равнаяnull, при распаковке будет выброшеноNullPointerException.
Освоив if, if-else и лесенку if-else-if, вы получаете полный контроль над ходом выполнения ваших программ на Java.
Часто задаваемые вопросы
Существует ли краткая запись if-else в Java?
Да — тернарный оператор ?:. Запись int max = (a > b) ? a : b; заменяет четыре строки if-else, когда каждая ветка лишь возвращает значение. Для веток с несколькими командами или побочными действиями используйте обычный if-else — так читаемее.
Как объединить несколько условий в одном if?
Логическими операторами: && — «И» (обе части истинны), || — «ИЛИ» (хотя бы одна истинна), ! — отрицание. Например: if (age >= 18 && hasTicket). Операторы && и || ленивые: правая часть не вычисляется, если результат уже ясен по левой.
Чем лесенка if-else-if отличается от switch?
Лесенка if-else-if проверяет любые логические условия, включая диапазоны вроде x > 10 и вызовы методов. Оператор switch сравнивает одно значение с константами и обычно читается легче, когда все ветки проверяют одну и ту же переменную на равенство.
Почему if (x = 5) не компилируется в Java?
Потому что = — это присваивание, а не сравнение. Выражение x = 5 имеет тип int, а условие в if должно быть типа boolean, поэтому компилятор выдаст ошибку. С логическими переменными осторожнее: if (flag = true) компилируется — присваивает true, и условие всегда истинно. Для сравнения используйте == или просто if (flag).
Video Explanation
Prefer video format? Watch this lesson with examples and explanations.
Comments