Операторы в Java — введение в Java 009 #
Мы уже использовали многое в наших программах не задумываясь. Например знаками знакомыми нам из школьной математики: +, -, = и др.. Пришло время узнать весь список доступных в Java операторов и применение.
Заранее скажу, что для введения в Java достаточно понимать первые две таблицы - арифметические операторы и операторы сравнения.
Арифметические операторы - arithmetic operators #
| Оператор | Пример использования | Пояснение |
|---|---|---|
| + | a + b | Сложение |
| - | a - b | Вычитание (также унарный минус) |
| * | a * b | Умножение |
| / | a / b | Деление |
| % | a % b | Деление по модулю |
| ++ | a++ | Инкремент, а++ соответствует а = а + 1 |
| – | a– | Декремент, а– соответствует а = а - 1 |
| += | a += b | Сложение с присваиванием Выражение a += b эквивалентно значению a = a + b. |
| -= | a -= b | Вычитание с присваиванием |
| *= | a *= b | Умножение с присваиванием |
| /= | a /= b | Деление с присваиванием |
| %= | a %= b | Деление по модулю с присваиванием |
Знак +, ой, простите, оператор сложения может быть и оператором конкатенации. Конкатенация = объединение, сцепление. Мы с ним знакомы, когда цепляем один String с другим. Мы их не складывали, а конкатенировали.
Операторы сравнения #
Мы с ними немного познакомились при рассмотрении: тип данных boolean и логические операторы.
| Оператор | Пример | Пояснение |
|---|---|---|
| == | a == b | a соответствует(равно) b |
| != | a != b | a не соответствует(не равно) b |
| > | a > b | а больше b |
| >= | a >= b | а больше либо равно b |
| < | a < b | а меньше b |
| <= | a <= b | а меньше либо равно b |
| && | a && b | а и b истинны, b оценивается условно (если а ложно, b не вычисляется) |
| || | a || b | а или b истинно, b оценивается условно (если а истинно, b не вычисляется) |
| ! | !a | а ложно |
| & | a & b | AND, а и b истинны, b оценивается в любом случае |
| | | a | b | OR, а или b истинно, b оценивается в любом случае |
| ^ | a ^ b | XOR, а и b различны (исключительное или, побитовое логическое или) |
Побитовые операторы #
Побитовые операторы работают с целыми числами, то есть с типами данных long, int, short, char(!), byte.
| Оператор | Пояснение |
|---|---|
| ~ | Побитовый унарный оператор NOT |
| & | Побитовый AND |
| &= | Побитовый AND с присваиванием |
| | | Побитовый OR |
| | = | Побитовый OR с присваиванием |
| ^ | Побитовый исключающий OR |
| ^= | Побитовый исключающее OR с присваиванием |
| >> | Сдвиг вправо |
| >= | Сдвиг вправо с присваиванием |
| >>> | Сдвиг вправо с заполнением нулями |
| « | Сдвиг влево |
| «= | Сдвиг влево с присваиванием |
| >>>= | Сдвиг вправо с заполнением нулями с присваиванием |
Побитовые операторы не самая простая тема и требует повторения/изучения математической составляющей. Её точно можно оставить “на потом” в базовое программирование эта тема не входит. Изучив и эту тему вы станете на один шаг ближе к “стать программистом”.
Доп. ссылки:
Логические операторы #
| Логический операторы | Значение |
|---|---|
| == | Проверка на соотвествие (допустим, что a равен b) |
| != | Неравно (eсли a неравно b, то) |
| ! | Отрицание, логическое не |
| & | Логическое И, and |
| | | Логическое или, or |
| ^ | Исключительное или, XOR |
| && | Укороченный & |
| || | Укороченный или |
| &= | AND с присваиванием |
| |= | OR с присваиванием |
| ^= | XOR с присваиванием |
| ?: | Тернарный (троичный) условный оператор |
Тернарный оператор достаточно интересен, мы его обязательно рассмотрим отдельно в следующих уроках.
Операторы присваивания #
Операторы присваивания содержат в себе знак равенства =. Все их мы уже рассмотрели в рамках других операторов. И в этом нет никакого противоречия. Java многогранна и её не всегда можно однозначно описать простым языком кожаных мешков. Тот же += является одновременно оператором арифметическим и присваивания.
Это не значит, что вы не можете составить таблицу операторов сравнения самостоятельно.
Для факультативного изучения #
- Помимо всего прочего, операторы бывают унарными. Соответственно существуют бинарные и тернарные операторы.
- Логические операторы && и || - это укороченные версии операторов & и |.
Отличие заключается в том, что например в укороченной версии (или), если первый операнд имеет значение (true), то выражение сразу становится (true) и второй операнд даже не рассматривается. То же самое и с (и), если первый операнд имеет ложное значение (false), то и все выражение сразу становится (false), второй операнд не рассматривается. И соответственно благодаря тому, что значение второго операнда вычислять не нужно, экономится время и повышается эффективность кода.
Пример:
public class AndAnd {
public static void main(String[] args) {
if(a() && b()){ //здесь меняем оператор и сравниваем результаты
System.out.println("Готово");
}else{
System.out.println("Не получилось");
}
}
public static boolean a(){
System.out.print("Hallo ");
return false;
}
public static boolean b(){
System.out.println("World");
return true;
}
}
//Если использовать оператор &&, то
Hallo Не получилось
//Вывод при использовании оператора &
Hallo World
Не получилось
Если должны быть проверены все условия, то надо использовать &. Если речь идёт о быстром и чётком решении, то && помогает сэкономить ресурсы и время.
Дополнительные материалы #
- https://docs.oracle.com/javase/tutorial/java/nutsandbolts/opsummary.html
- https://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html
- https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op2.html
- Прекраснейшая статья о побитовом сдвиге - https://javarush.ru/groups/posts/1925-pobitovihe-operacii
- https://www.baeldung.com/java-compound-operators
Очень рекомендую ресурс - www.baeldung.com. На проекте очень много грамотных постов о Java и из мира Java. Можно ввести в Google запрос “baeldung cast int” и получить прекрасную статью для самостоятельного изучения конвертации данных из типа данных String в int. Ресурс определённо в закладки.
Домашнее задание #
- Ознакомьтесь с термином - body mass index (BMI) Индекс массы тела .
- Напишите программу расчёта индекса массы тела.
- Если возникнут сложности, помните, что у вас есть все знания, что бы решить данную задачу. Просто решите её сначала на бумаге, а потом перенесите в Java.