Menu

if-else в Java: условные операторы с примерами

Как принимать решения в Java с помощью if, else if и else: булевы условия, цепочки ветвей, вложенность, тернарный оператор и распространённые ошибки, на которых спотыкаются многие.

На этой странице есть исполняемые редакторы: меняйте, запускайте и сразу видите результат.

Принятие решений с помощью if

Программы должны реагировать на данные: сдал или провалил, в наличии или распродано, корректно или нет. Оператор if — это то, как Java выбирает, какой код выполнить, исходя из условия.

if принимает булево условие в скобках и выполняет блок в фигурных скобках только тогда, когда это условие равно true:

Условие score >= 60 равно true, поэтому сообщение печатается. Строка после закрывающей скобки выполняется всегда — она вне if. Измени score на 40, и строка «passed» будет полностью пропущена.

В отличие от C, Java не позволит поставить число там, где ожидается булево значение. if (score) — это ошибка компиляции: условие должно быть настоящим выражением boolean, построенным из сравнений (>, >=, ==, !=) или булевой логики (&&, ||, !).

Добавление else

else даёт тебе путь «иначе» — код, который выполняется только тогда, когда условие равно false:

Выполняется ровно один из двух блоков — никогда оба, никогда ни одного. У else нет собственного условия; он просто перехватывает всё, что не охватил if.

Цепочки с else if

Когда исходов больше двух, объединяй условия в цепочку через else if. Java проверяет их сверху вниз и выполняет первый блок, чьё условие истинно, а остальные пропускает:

Порядок важен. Поскольку 84 сначала проверяется на >= 90 (ложь), затем на >= 80 (истина), он останавливается на B и даже не проверяет нижние границы. Именно поэтому тебе не нужно писать score >= 80 && score < 90: достижение второй ветви уже гарантирует, что score был меньше 90. Ставь самое узкое или самое приоритетное условие первым.

Завершающий else — это твой случай «по умолчанию». Опустить его здесь было бы ошибкой компиляции, так как grade мог бы остаться без присвоенного значения к моменту вывода.

Сравнение значений: == против equals()

Самая частая ошибка в if в Java — сравнение строк через ==. Для примитивов (int, double, char, boolean) == корректно. Для объектов == спрашивает «это один и тот же объект в памяти?», тогда как .equals() спрашивает «у них одинаковое содержимое?» — и почти всегда тебе нужно последнее:

Печатается только второе сообщение. new String("yes") — это объект, отличный от литерала "yes", поэтому == равно false, но текст идентичен, поэтому .equals() равно true. Правило большого пальца: для примитивов используй ==, для объектов используй .equals().

Безопасный приём, чтобы избежать NullPointerException, когда переменная может быть null: ставь литерал первым — if ("yes".equals(input)) — поскольку литерал никогда не бывает null.

Объединение и вложение условий

Ты можешь объединять условия с помощью && (и), || (или) и ! (не) или вкладывать один if в другой, когда проверка имеет смысл только после прохождения предыдущей:

&& и || вычисляются с коротким замыканием: в a && b, если a ложно, Java никогда не вычисляет b. Это удобно для защиты от ошибок: if (s != null && s.length() > 0) безопасно, потому что проверка длины пропускается, когда s равно null. По возможности предпочитай объединение через && глубокой вложенности; плоский код читается яснее, чем пирамида из скобок.

Классическая ловушка: один = — это присваивание, == — сравнение. Написать if (x = 5) — ошибка компиляции для int (хорошо), но if (flag = true) для boolean компилируется и молча присваивает — следи за этим.

Тернарный оператор

Когда всё, что тебе нужно, — выбрать между двумя значениями, тернарный оператор ?: — это компактная однострочная запись. Читай condition ? a : b как «если условие, то a, иначе b»:

Тернарный оператор возвращает значение, которое можно присвоить или передать напрямую. Оставь его для простого выбора: если какой-то ветви нужно несколько операторов или настоящая логика, полный if-else остаётся читаемым там, где вложенный тернарник быстро превращается в головоломку.

Ловушка: необязательные фигурные скобки

Java позволяет опускать фигурные скобки, когда в ветви всего один оператор, но это провоцирует коварную ошибку. Отступы лгут:

if (loggedIn)
    System.out.println("Welcome");
    System.out.println("Loading dashboard");   // NOT part of the if!

Только первая строка управляется if; вторая выполняется всегда, что бы ни было, несмотря на то, что отступ намекает на обратное. Всегда используй фигурные скобки — даже для одной строки — и весь этот класс ошибок исчезает.

Далее: switch

Цепочки if-else if идеальны, когда каждая ветвь проверяет своё условие. Но когда ты сверяешь одно значение со многими фиксированными вариантами — названием дня, пунктом меню, перечислением — длинная лестница else if становится однообразной. Оператор switch создан именно для этого, и это следующая страница.

Часто задаваемые вопросы

Как написать оператор if-else в Java?

Поставь булево условие в скобках после if, затем код для выполнения в фигурных скобках и необязательный блок else на случай, когда условие ложно: if (score >= 60) { System.out.println("Pass"); } else { System.out.println("Fail"); }. Условие должно вычисляться в boolean — Java не примет int, как это делает C.

В чём разница между == и equals() в операторе if в Java?

== проверяет, указывают ли две ссылки на один и тот же объект, тогда как .equals() сравнивает содержимое. Для примитивов вроде int используй ==. Для объектов — особенно String — используй .equals(): if (name.equals("Sam")), а не if (name == "Sam"). Использование == со строками — самая частая ошибка в if в Java.

Что такое тернарный оператор в Java?

Тернарный оператор condition ? valueIfTrue : valueIfFalse — это компактный if-else, который возвращает значение. Например, String label = age >= 18 ? "adult" : "minor"; присваивает одно из двух значений в зависимости от условия. Используй его для простого выбора значения; переходи к полному if-else, когда в каждой ветви нужно выполнять логику.

Coddy programming languages illustration

Учитесь программировать с Coddy

НАЧАТЬ