Операторы

Операторы — это знаки, которые что-то делают со значениями. Три главные группы:

  • Арифметические+ - * / % (остаток от деления);
  • Сравнения== != < > <= >= (результат всегда boolean);
  • Логические&& || ! (И, ИЛИ, НЕ — для условий).
int sum = 5 + 3;          // 8
boolean isAdult = age >= 18;
boolean canVote = isAdult && hasCitizenship;   // оба условия сразу

% — остаток от деления, не «процент»: 10 % 3 равно 1 (10 делится на 3 три раза, остаётся 1). Часто используется, чтобы проверить чётность: n % 2 == 0.

Копнуть глубже

Short-circuit (короткое замыкание) у && и ||. Java не проверяет второе условие, если первое уже решило исход:

if (user != null && user.isActive()) { ... }

Если user == null, до user.isActive() дело не дойдёт — иначе была бы NullPointerException. && останавливается на первом false, || — на первом true. Это не просто оптимизация, а защитный приём, на который часто опираются специально.

Инкремент/декремент. ++ и -- имеют две формы:

int i = 5;
i++;        // постфикс: использовать старое значение, потом прибавить
++i;        // префикс: сначала прибавить, потом использовать

Разница видна только внутри выражения: int a = i++; положит в a старое значение, int b = ++i; — уже новое.

Составное присваивание. x += 5 — то же самое, что x = x + 5, просто короче. Так же работают -= *= /= %=.

Под капотом

Целочисленное деление режет дробную часть, а не округляет:

int result = 7 / 2;     // 3, а не 3.5 и не 4
double real = 7.0 / 2;  // 3.5 — если хотя бы один операнд double

Чтобы получить дробный результат, хотя бы одно из чисел должно быть double/float — иначе Java честно делит как целые и отбрасывает остаток.

Приоритет операторов* / % выполняются раньше + -, как в математике. Если сомневаешься — скобки () явно задают порядок и делают код понятнее, даже когда приоритет и так правильный.

Побитовые операторы (& | ^ ~ << >>) работают с битами числа напрямую — встречаются редко, в основном во флагах и низкоуровневой оптимизации. На старте достаточно знать, что они существуют.

🎤 Закрыл тему, если можешь объяснить:
• арифметические, сравнения, логические операторы и что делает `%`;
• что такое short-circuit у `&&`/`||` и разница `i++` vs `++i` (если дошёл до 2-го слоя).