JavaRush /Курсы /JAVA 25 SELF /Приоритет операторов и скобки в условиях

Приоритет операторов и скобки в условиях

JAVA 25 SELF
3 уровень , 4 лекция
Открыта

1. Введение

Давайте начнем с бытовой аналогии. Представьте себе рецепт:

Смешайте муку, яйца и сахар, взбейте, добавьте масло, взбейте еще раз.

Выглядит странно? А теперь представьте, что между словами «взбейте» и «добавьте» стоит запятая или скобки. Порядок действий сразу становится яснее.

В программировании похожая ситуация возникает, когда вы пишете сложное выражение:

boolean result = a > 0 && b < 10 || c == 3;

Какой порядок? Что вычисляется первым: a > 0 && b < 10, потом || c == 3? Или всё наоборот?
Без четкого порядка вычислений компьютер может «перепутать ингредиенты», и ваш результат будет неожиданным.

2. Приоритет операторов в Java

Java (как и большинство языков программирования) использует определённую таблицу приоритетов операторов.
Операторы с более высоким приоритетом выполняются раньше, чем операторы с низким приоритетом.

Посмотрите на самую важную часть этой таблицы (для условных выражений):

Оператор Описание Приоритет
()
Скобки самый высокий
!
Логическое "НЕ" высокий
==, !=
Равно / не равно средний
<, >, <=, >=
Сравнения средний
&&
Логическое "И" ниже
||
Логическое "ИЛИ" ещё ниже

(Есть ещё арифметические операторы — они выше логических по приоритету.)

Главное правило

Операторы "И" (&&) имеют больший приоритет, чем "ИЛИ" (||),
то есть сначала будет вычислен "И", потом "ИЛИ". Недаром И — логическое умножение, а ИЛИ — сложение.

Блок-схема вычисления приоритета условий

graph LR
    A["a > 0"] --&&--> B["b < 10"]
    B --||--> C["c == 3"]

(На практике: a > 0 && b < 10 || c == 3 — сначала считается a > 0 && b < 10, потом результат сравнивается с c == 3 через ||.)

3. Направление операторов: слева направо и наоборот

Кроме приоритета, есть ещё такое слово: ассоциативность.
Это правило, в каком направлении вычисляются операторы, если они стоят «рядом» и имеют один приоритет.

Пример:

boolean a = true, b = false, c = true;
boolean result = a && b && c;

Вопрос: как посчитается?
Ответ: ассоциативность у &&слева направо.
Значит, сначала a && b, потом результат с c.

Применительно к условиям:

Оператор Ассоциативность
&&, ||
слева направо
!
справа налево

4. Скобки — ваш лучший друг в сложных условиях

Вот здесь начинается магия (и спасение). Когда вы пишете выражение, скобки меняют приоритет и делают ваш код понятнее и безопаснее.

Пример 1 (без скобок):

// Мы хотим: "Если пользователь взрослый и гражданин, или если у него есть спецпропуск"
boolean isAdult = age >= 18;
boolean isCitizen = country.equals("Беларусь");
boolean hasPermit = hasSpecialPass == true;

if (isAdult && isCitizen || hasPermit)
{
    System.out.println("Доступ разрешён!");
}

Как считает Java:
Сначала вычисляет isAdult && isCitizen, потом результат сравнивает по || с hasPermit.

  • Допустим, isAdult = true, isCitizen = false, hasPermit = true
  • isAdult && isCitizentrue && falsefalse
  • false || truetrue

То есть, если у человека спецпропуск, всё равно пропустят.
А если без спецпропуска, но взрослый гражданин — тоже пропустят.

Пример 2 (со скобками):

if (isAdult && (isCitizen || hasPermit))
{
    System.out.println("Доступ разрешён!");
}

Теперь программа сначала проверяет: isCitizen || hasPermit, а затем этот результат вместе с isAdult.

То есть вам нужно быть взрослым и (или гражданином, или иметь спецпропуск).
Маленькая разница в скобках — огромная разница в логике!

1
Задача
JAVA 25 SELF, 3 уровень, 4 лекция
Недоступна
Приоритет логических операторов 🌴
Приоритет логических операторов 🌴
1
Задача
JAVA 25 SELF, 3 уровень, 4 лекция
Недоступна
Использование скобок в логических выражениях 🎸
Использование скобок в логических выражениях 🎸
1
Задача
JAVA 25 SELF, 3 уровень, 4 лекция
Недоступна
Проход на секретную вечеринку 🤫
Проход на секретную вечеринку 🤫
1
Задача
JAVA 25 SELF, 3 уровень, 4 лекция
Недоступна
Условия получения кредита в банке 💰
Условия получения кредита в банке 💰
Комментарии (27)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Alexander Grischenko Уровень 4
12 марта 2026
Использовал в задачи по выдачи кредита вместо ">" оператора ">=". Просить исправить, но по сути клиент уже в любом случаи 21, там же дни... Или я уже прислал??
Walter White Уровень 4
15 февраля 2026
Зачем в условии написали ответ для решения ? Приходится как-то закрывать и не смотреть, чтобы самому писать код...
StepV Уровень 8
19 февраля 2026
+1
Anonymous #6453453 Уровень 4
13 февраля 2026
Совсем не оставили пространства для размышления. В условие есть все ответы, как ранее написали - скопировал и вставил.
Anonymous #3441947 Уровень 5
9 февраля 2026
Both "cancelled" and "canceled" are correct spellings for the past tense of the verb "to cancel." "Canceled" (single 'l') is the preferred spelling in American English. "Cancelled" (double 'l') is the standard spelling in British English and Commonwealth countries. Both forms are understood globally, but consistency is recommended.
Red_ D Уровень 4
7 февраля 2026
Пример 1 (без скобок): Как считает Java: Сначала вычисляет isAdult && isCitizen, потом результат сравнивает по || с hasPermit. вообще нет. isAdult && isCitizen он не сравнивает, а узнаёт результат вычесление обоих переменных, если хоть где то есть false, то или смотрим что дальше (если есть или-||), или пропускаем блок под if. если послек isAdult && isCitizen есть || с hasPermit, тогда уже смотрим что выдаст hasPermit, если там true, идём выполнять блок под ифом, если false, пропускаем блок кода. результат isAdult && isCitizen никак не сравнивается с hasPermit, по факту, hasPermit это контрольная проверка выразить можно вот так:

if (isAdult && isCitizen)
    {
        System.out.println("Доступ разрешён!");
    } else if (hasPermit) {
        System.out.println("Доступ разрешён!");
    }
как видите isAdult && isCitizen никак не сравнивается с hasPermit. if (false || false || true) - если ХОТЯ БЫ ОДИН аргумент true, выполняем то что под if if (false && false && true) - если ВСЕ аргументы true, выполняем то что под if
Андрей Уровень 16
30 января 2026
Все разобрался, это два символа || (на клавище вместе со \). К сожалению на экране этот разрыв в вертикальных черточках не виден. Не плохо бы это пояснить в тексте курса.
Geocancer Уровень 7
21 января 2026
ctrl + c, ctrl + v 👽
Peter Уровень 6
16 января 2026
Не, ну ребят, писать ответы прямо в условии КО ВСЕМ задачам...такого даже в первом классе школы не делают...
Elnara Уровень 4
13 января 2026
А это влияет на результат? "Во втором слагаемом первого выражения перепутан порядок операндов: используется (hasGuarantor && hasCreditHistory) вместо требуемого (hasCreditHistory && hasGuarantor). Исправьте на (hasCreditHistory && hasGuarantor)."
Павел Уровень 11
11 января 2026
Странно, что приоритет логического отрицания ("Не") выше, чем у операторов сравнения 🙄