Операторы
Оператор — символ, который выполняет действие над значениями: складывает, сравнивает, объединяет условия. Значения, с которыми он работает, называются операндами: в 2 + 3 оператор +, а операнды 2 и 3.
Арифметика
Сложение, вычитание и умножение работают привычно. Оператор % даёт остаток от деления:
void main() {
IO.println(7 + 2);
IO.println(7 - 2);
IO.println(7 * 2);
IO.println(7 % 2);
}Результат:
9
5
14
1Остаток удобен, чтобы проверять чётность: число чётное, если n % 2 равно нулю.
Деление
Если оба операнда целые, результат тоже целый — дробная часть просто отбрасывается. Чтобы получить дробный ответ, хотя бы одно число должно быть double:
void main() {
IO.println(7 / 2);
IO.println(7.0 / 2);
}Результат:
3
3.5Составное присваивание
Запись x += 5 — короткая форма x = x + 5. Так же работают -=, *=, /= и %=. Для увеличения и уменьшения на единицу есть операторы ++ и --:
void main() {
int count = 10;
count += 5;
count *= 2;
count++;
IO.println(count);
}Результат:
31Сравнение
Операторы сравнения возвращают boolean: == (равно), != (не равно), <, >, <=, >=. Обратите внимание: сравнение пишется двумя знаками =, один знак — это присваивание:
void main() {
int age = 20;
IO.println(age >= 18);
IO.println(age == 21);
IO.println(age != 21);
}Результат:
true
false
trueЛогические операторы
Логические операторы объединяют условия: && (и) — истина, когда истинны оба условия; || (или) — когда истинно хотя бы одно; ! (не) — меняет значение на противоположное:
void main() {
int age = 25;
boolean hasTicket = false;
IO.println(age >= 18 && hasTicket);
IO.println(age >= 18 || hasTicket);
IO.println(!hasTicket);
}Результат:
false
true
trueЕсть и операторы, которые работают с отдельными битами числа, — о них урок побитовые операторы.
Порядок вычисления
Как и в математике, умножение и деление выполняются раньше сложения и вычитания. Скобки меняют порядок:
void main() {
IO.println(2 + 3 * 4);
IO.println((2 + 3) * 4);
}Результат:
14
20Если сомневаетесь в порядке, поставьте скобки — код станет понятнее.
Частая ошибка
Деление целых чисел незаметно теряет дробную часть. Здесь среднее двух оценок должно быть 4.5, но получается 4:
void main() {
int a = 4;
int b = 5;
double average = (a + b) / 2;
IO.println(average);
}Результат:
4.0Деление 9 / 2 выполнилось как целочисленное ещё до записи в double. Делите на 2.0, и результат будет 4.5.