Логические операторы
Логические операторы языка Java выполняются только с операндами типа boolean.
Следующая таблица перечисляет логические операторы языка Java:
| Операция | Описание |
| & | Логическая операция И (AND) или конъюнкция |
| | | Логическая операция ИЛИ (OR) или дизъюнкция |
| ^ | Логическая операция исключающее ИЛИ (XOR) |
| ! | Логическая унарная операция НЕ (NOT) |
| || | Укороченная логическая операция ИЛИ (short-circuit) |
| && | Укороченная логическая операция И (short-circuit) |
| == | Равенство |
| != | Неравенство |
| &= | Логическая операция И с присваиванием |
| |= | Логическая операция ИЛИ с присваиванием |
| ^= | Логическая операция исключающее ИЛИ с присваиванием |
1. Логические операторы OR, AND, XOR, NOT.
Начнем с операций OR(|), AND(&), XOR(^), NOT(!). Операторы OR, AND, XOR являются бинарными - они требуют два оператора. NOT - это унарный оператор, только один оператор участвует в операции. Результаты выполнения этих логических операций представлены в следующей таблице:
| A | B | A|B | A&B | A^B | !A |
| false | false | false | false | false | true |
| true | false | true | false | true | false |
| false | true | true | false | true | true |
| true | true | true | true | false | false |
OR (|) - результат будет true, если хотя бы одно значение равно true. Пример: для того, чтобы забрать ребенка из садика, должна прийти либо мать, либо отец, либо оба - в любом случае результат будет положительный. Если же никто не придет, ребенка не заберут - результат будет отрицательный.
AND (&) - результат будет true, только если и A, и B равны true. Пример: для того чтобы свадьба состоялась, и невеста (A) и жених (B) должны явиться на бракосочетание, иначе оно не состоится.
XOR (^) - результат будет true, только если или A равно true, или В равно true. Пример: у двух друзей на двоих один велосипед, поездка на велосипеде состоится только если один из них поедет на нем. Вдвоем они ехать не могут.
NOT (!) - инвертирование значения. Если значение было true, то станет false, и наоборот.
Рассмотрим пример использования логических операторов:
public class BooleanLogic1 {
public static void main(String[] args) {
boolean a = true;
boolean b = false;
boolean c = a | b;
boolean d = a & b;
boolean e = a ^ b;
boolean f = (!a & b) | (a & !b);
boolean g = !a;
System.out.println("a = " + a);
System.out.println("b = " + b);
System.out.println("a | b = " + c);
System.out.println("a & b = " + d);
System.out.println("a ^ b = " + e);
System.out.println("(!a & b) | (a & !b) = " + f);
System.out.println("!a = " + g);
}
} 2. Укороченные логические операторы (short-circuit).
Чаще всего в языке Java используются так называемые укороченные логические операторы (short-circuit):
Правый операнд сокращенных операций вычисляется только в том случае, если от него зависит результат операции, то есть если левый операнд конъюнкции имеет значение true, или левый операнд дизъюнкции имеет значение false.
В формальной спецификации языка Java укороченные логические операции называются условными.
В следующем примере правый операнд логического выражения вычисляться не будет, так как условие d != 0 не выполняется и нет смысла дальше вычислять это выражение:
public class BooleanLogic2 {
public static void main(String[] args) {
int d = 0;
int num = 10;
if (d != 0 && num / d > 10) {
System.out.println("num = " + num);
}
}
} Если же логическое выражение переписать как d != 0 & num / d > 10, то правое выражение вычисляться будет. И в этом случае программа выбросит исключение времени выполнения с сообщением - на ноль делить нельзя.
Если нам надо сравнить возможный диапазон значений для какой-то переменной, например - a < x < b, такое условие разбивается на два: a < x && x < b:
public class BooleanLogic3 {
public static void main(String[] args) {
int a = 1;
int b = 2;
int x = 3;
System.out.print(a < x && x < b);
// System.out.print(a < x < b);//Ошибка компиляции
}
} 3. Операции ==, !=.
Здесь все просто - чтобы сравнить два значения типа boolean, можно использовать знаки == (проверка на равенство) и != (проверка на неравенство):
public class BooleanLogic4 {
public static void main(String[] args) {
boolean b1 = true;
boolean b2 = false;
System.out.println(b1 == b2);
System.out.println(b1 != b2);
}
} 4. Операции с присваиванием.
Также существуют операции с присваиванием для AND, OR, XOR. Посмотрим пример:
public class BooleanLogic5 {
public static void main(String[] args) {
boolean b1 = true;
boolean b2 = true;
b1 &= b2;//равносильно b1 = b1 & b2;
System.out.println(b1);
b1 |= b2; //равносильно b1 = b1 | b2;
System.out.println(b1);
b1 ^= b2; //равносильно b1 = b1 ^ b2;
System.out.println(b1);
}
}
Презентацию с видео можно скачать на Patreon.
Курс 'Java для начинающих' на Udemy
Зарегистрируйтесь или войдите, чтобы иметь возможность оставить комментарий.