Когда ты пишешь код на Java, тебе каждый день приходится использовать операторы. Это символы или конструкции, которые выполняют действия — от простого сложения до сложных логических проверок. Давайте разложим всё по полочкам и поймём, как и какие операторы работают, что такое приоритет и зачем нужен класс Math.
🚀 Что такое оператор и операнд?
Оператор — это команда, которая говорит Java: «Эй, сделай что-то с этими данными!».
Операнд — это сами данные.
Пример:
int result = 7 + 3;
- + — оператор
- 7 и 3 — операнды
🧮 Арифметические операторы
Используются для выполнения стандартных математических операций.
🔎 Пример с пояснениями:
public class ArithmeticExample {
public static void main(String[] args) {
int a = 8;
int b = 3;
System.out.println("Сумма: " + (a + b)); // 11
System.out.println("Разность: " + (a - b)); // 5
System.out.println("Произведение: " + (a * b)); // 24
System.out.println("Частное: " + (a / b)); // 2
System.out.println("Остаток: " + (a % b)); // 2
a++; // a теперь 9
b--; // b теперь 2
System.out.println("a после a++: " + a);
System.out.println("b после b--: " + b);
}
}
🧠 Логические операторы
Работают с условиями. Результат — всегда true или false.
🔎 Пример:
int x = 7;
int y = 10;
System.out.println(x > 5 && y < 15); // true
System.out.println(x < 5 || y < 5); // false
System.out.println(!(x == 7)); // false
🔍 Операторы сравнения
Сравнивают два значения.
💡 Тернарный оператор ?:
Позволяет записать условие и выбрать результат в одну строку.
Синтаксис:
<условие> ? <если true> : <если false>
🔎 Пример:
int age = 17;
String status = (age >= 18) ? "Взрослый" : "Подросток";
System.out.println(status); // Подросток
⚙️ Побитовые операторы
Работают на уровне битов (0 и 1). Используются реже, но могут быть полезны в оптимизации.
🔎 Пример:
int m = 6; // 0110
int n = 3; // 0011
System.out.println(m & n); // 2 (0010)
System.out.println(m | n); // 7 (0111)
System.out.println(m ^ n); // 5 (0101)
🥇 Приоритет операторов
Когда в выражении несколько операторов, Java должна понять, в каком порядке их выполнять.
Пример:
int x = 2 + 3 * 4; // Сначала 3*4, потом +2 = 14
Приоритет (от высокого к низкому):
- (), [], .
- ++, --, !
- *, /, %
- +, -
- <<, >>, >>>
- <, <=, >, >=
- ==, !=
- &
- ^
- |
- &&
- ||
- ?:
- =, +=, -=, и др.
📐 Класс Math: полезные методы
Java даёт готовый набор функций через класс Math.
✅ Проверь себя: тест (ответы в конце статьи, сначала попробуй сделать самостоятельно)
- Какой результат выведет следующий код?
System.out.println(100 + 50L);
- A. 150
- B. 10050
- C. Ошибка компиляции
- D. 150L
- Что напечатает?
System.out.println("Результат: " + 3 + 2);
- A. Результат: 5
- B. Результат: 32
- C. Результат: 3 + 2
- D. Ошибка компиляции
- Какое выражение вернёт true?
int a = 5, b = 10;
- A. a < 3 && b < 20
- B. a > 3 && b < 20
- C. a > 3 && b > 20
- D. a > 10 && b < 5
- Какой из вариантов сработает без ошибки?
String s = "Java";
int i = 1;
long l = 5;
- A. i << s
- B. i << l
- C. i << i
- D. i << 1.0
- Что будет напечатано?
System.out.println(0b1010 | 0b0101);
- A. 15
- B. 0
- C. 5
- D. 12
- Какой метод из класса Math вернёт наибольшее число из двух?
- A. Math.abs()
- B. Math.max()
- C. Math.high()
- D. Math.top()
- Что делает оператор instanceof?
- A. Сравнивает значения переменных
- B. Проверяет тип переменной
- C. Выполняет логическое И
- D. Проверяет, равны ли строки
- Что вернёт следующий код?
int age = 20;
String result = (age < 18) ? "Underage" : "Adult";
System.out.println(result);
- A. Underage
- B. Adult
- C. 20
- D. Ошибка компиляции
📝 Задачи для отработки навыков (ответы в конце статьи, сначала попробуй сделать самостоятельно)
Задача 1. Операции с числами и строками
Напишите программу, которая выполняет следующие операции:
- Преобразует строку "12" в число и добавляет к числу 8.
- Преобразует число 5 в строку и объединяет его с " результат".
- Вычисляет сумму чисел 2, 5 и 8, а затем умножает её на 3.
Задача 2. Побитовые операции
Даны два числа:
int a = 45; // 00101101
int b = 25; // 00011001
Необходимо вычислить:
- Результат побитового И (a & b).
- Результат побитового ИЛИ (a | b).
- Результат побитового исключающего ИЛИ (a ^ b).
- Результат побитового сдвига влево (a << 2).
- Результат побитового сдвига вправо (b >> 2).
Задача 3. Проверка чётности
Напишите программу, которая с помощью побитового оператора проверяет, является ли число чётным или нечётным. Введите несколько чисел и для каждого выведите "Чётное" или "Нечётное".
Задача 4. Логические операторы
Даны три переменные:
boolean a = true;
boolean b = false;
boolean c = true;
Вам нужно:
- Вывести результат логического И для всех трёх переменных (a && b && c).
- Вывести результат логического ИЛИ для всех трёх переменных (a || b || c).
- Вывести результат логического НЕ для каждой из переменных (например, !a, !b и !c).
Задача 5. Использование тернарного оператора
Напишите программу, которая:
- Проверяет, является ли число положительным, отрицательным или нулём, и выводит соответствующее сообщение с помощью тернарного оператора.
- Вводится три числа, программа должна вывести наибольшее из них с использованием тернарного оператора.
✅ Заключение
В этом уроке мы рассмотрели ключевые виды операторов в Java:
- Арифметические операторы помогают выполнять базовые математические действия.
- Побитовые операторы работают на уровне битов и полезны для низкоуровневой оптимизации.
- Операторы сравнения возвращают true или false в зависимости от логического результата.
- Логические операторы позволяют строить сложные условия.
- Тернарный оператор упрощает ветвление и заменяет конструкцию if-else в одной строке.
- Класс Math предоставляет мощный инструментарий для математических вычислений.
- Мы также изучили приоритет операторов, который помогает Java правильно расставлять порядок действий в сложных выражениях.
Теперь ты готов увереннее писать сложные условия, использовать математические методы и писать более читаемый код.
📝 Ответы на тест:
- Какой результат выведет следующий код?
System.out.println(100 + 50L);
✅ Правильный ответ: A. 150
Объяснение: При сложении числа int и числа long результат автоматически преобразуется в long. Окончательный результат будет 150.
- Что напечатает?
System.out.println("Результат: " + 3 + 2);
✅ Правильный ответ: B. Результат: 32
Объяснение: Операция сложения работает слева направо, и строки в Java имеют больший приоритет. Поэтому сначала "Результат: " объединяется с числом 3, а потом с числом 2, что даёт строку "Результат: 32".
2. Какое выражение вернёт true?
int a = 5, b = 10;
✅ Правильный ответ: B. a > 3 && b < 20
Объяснение: Логическое И (&&) вернёт true, если оба условия истинны. В данном случае, a > 3 (истинно) и b < 20 (истинно).
3. Какой из вариантов сработает без ошибки?
String s = "Java";
int i = 1;
long l = 5;
✅ Правильный ответ: C. i << i
Объяснение: Операция сдвига (<<) возможна только для числовых типов данных. В этом случае i (тип int) можно сдвигать. Все остальные операции, например, сдвиг с использованием строк или вещественных типов, вызовут ошибку.
4. Что будет напечатано?
System.out.println(0b1010 | 0b0101);
✅ Правильный ответ: A. 15
Пояснение:
- Побитовое ИЛИ (|) возвращает 1, если хотя бы один из битов равен 1.
- В данном случае:
1 | 0 = 1
0 | 1 = 1
1 | 0 = 1
0 | 1 = 1
Итог: 0b1111 → 15.
5. Какой метод из класса Math вернёт наибольшее число из двух?
✅ Правильный ответ: B. Math.max()
Объяснение: Метод Math.max() принимает два аргумента и возвращает наибольшее из них.
6. Что делает оператор instanceof?
✅ Правильный ответ: B. Проверяет тип переменной
Объяснение: Оператор instanceof проверяет, является ли объект экземпляром указанного класса или его подклассов.
7. Что вернёт следующий код?
int age = 20;
String result = (age < 18) ? "Underage" : "Adult";
System.out.println(result);
✅ Правильный ответ: B. Adult
Объяснение: Оператор тернарного выбора (?:) проверяет условие. В данном случае, так как возраст больше 18, то возвращается строка "Adult".
Поздравляю с прохождением теста! Если есть вопросы по любому из пунктов, не стесняйся задавать!
📝 Решения и пояснения к задачам
Задача 1. Операции с числами и строками
public class Operations {
public static void main(String[] args) {
// 1. Преобразование строки "12" в число и добавление 8
String str = "12";
int num1 = Integer.parseInt(str);
System.out.println(num1 + 8); // Выводит 20
// 2. Преобразование числа 5 в строку и объединение с " результат"
int num2 = 5;
String str2 = String.valueOf(num2);
System.out.println(str2 + " результат"); // Выводит 5 результат
// 3. Сумма чисел 2, 5 и 8, умноженная на 3
int sum = 2 + 5 + 8;
System.out.println(sum * 3); // Выводит 45
}
}
Пояснение:
- В первом случае строка "12" преобразуется в число с помощью Integer.parseInt().
- Во втором случае число 5 преобразуется в строку с помощью String.valueOf().
- В третьем случае выполняются простые арифметические операции с числами.
Задача 2. Побитовые операции
public class BitwiseOperations {
public static void main(String[] args) {
int a = 45; // 00101101
int b = 25; // 00011001
// 1. Побитовое И
System.out.println(a & b); // Выводит 9 (00001001)
// 2. Побитовое ИЛИ
System.out.println(a | b); // Выводит 61 (00111101)
// 3. Побитовое исключающее ИЛИ
System.out.println(a ^ b); // Выводит 52 (00110100)
// 4. Побитовый сдвиг влево на 2
System.out.println(a << 2); // Выводит 180 (10110100)
// 5. Побитовый сдвиг вправо на 2
System.out.println(b >> 2); // Выводит 6 (00000110)
}
}
Пояснение:
- Побитовые операции работают на уровне отдельных битов чисел.
- a & b оставляет единицу в битах, где оба числа имеют единицу.
- a | b оставляет единицу в битах, где хотя бы одно число имеет единицу.
- a ^ b оставляет единицу в битах, где только одно число имеет единицу.
- Сдвиг влево (<<) сдвигает все биты числа влево, заполняя правую часть нулями.
- Сдвиг вправо (>>) сдвигает биты вправо, заполняя левую часть нулями (для положительных чисел).
Задача 3. Проверка чётности
public class EvenOdd {
public static void main(String[] args) {
int[] numbers = {4, 7, 10, 21, 28}; // Пример чисел
for (int num : numbers) {
System.out.println((num & 1) == 0 ? "Чётное" : "Нечётное");
}
}
}
Пояснение:
- Чтобы проверить чётность числа, используем побитовый оператор &. Если результат операции num & 1 равен 0, число чётное, если 1 — нечётное.
Задача 4. Логические операторы
public class LogicalOperators {
public static void main(String[] args) {
boolean a = true;
boolean b = false;
boolean c = true;
// 1. Логическое И
System.out.println(a && b && c); // Выводит false
// 2. Логическое ИЛИ
System.out.println(a || b || c); // Выводит true
// 3. Логическое НЕ
System.out.println(!a); // Выводит false
System.out.println(!b); // Выводит true
System.out.println(!c); // Выводит false
}
}
Пояснение:
- Логическое И (&&) возвращает true только если оба операнда true.
- Логическое ИЛИ (||) возвращает true если хотя бы один из операндов true.
- Логическое НЕ (!) инвертирует значение операнда.
Задача 5. Использование тернарного оператора
public class TernaryOperator {
public static void main(String[] args) {
// 1. Проверка на положительное, отрицательное или ноль
int num = -5;
String result = (num > 0) ? "Положительное" : (num < 0) ? "Отрицательное" : "Ноль";
System.out.println(result); // Выводит Отрицательное
// 2. Найти наибольшее из трёх чисел
int a = 10, b = 20, c = 15;
int max = (a > b && a > c) ? a : (b > c) ? b : c;
System.out.println(max); // Выводит 20
}
}
Пояснение:
- В первом случае используется вложенный тернарный оператор для проверки, является ли число положительным, отрицательным или равным нулю.
- Во втором случае тернарный оператор используется для поиска максимального числа среди трёх.
Эти задачи помогут вам лучше понять работу операторов в Java и отработать их применение в реальных задачах.