1. Введение
В Java у нас есть два способа сказать «И». Но что использовать?
В этом уроке мы рассмотрим различия между & и &&. Попутно мы узнаем о побитовых операциях и коротких замыканиях.
2. Использование побитового И
Побитовый оператор AND (&) сравнивает каждую двоичную цифру двух целых чисел и возвращает 1, если оба числа равны 1, иначе возвращает 0.
Давайте посмотрим на два целых числа:
int six = 6;
int five = 5;
Далее применим к этим числам побитовый оператор И:
int resultShouldBeFour = six & five;
assertEquals(4, resultShouldBeFour);
Чтобы понять эту операцию, давайте посмотрим на двоичное представление каждого числа:
Binary of decimal 4: 0100
Binary of decimal 5: 0101
Binary of decimal 6: 0110
Оператор & выполняет логическое И для каждого бита и возвращает новое двоичное число:
0110
0101
-----
0100
Наконец, наш результат — 0100 —
можно преобразовать обратно в десятичное число — 4
.
Давайте посмотрим тестовый Java-код:
int six = 6;
int five = 5;
int resultShouldBeFour = six & five;
assertEquals(4, resultShouldBeFour);
2.1. Использование & с логическими значениями
Кроме того, мы можем использовать побитовый оператор AND ( & ) с
логическими
операндами. Он возвращает true
только в том случае, если оба операнда имеют значение true
, в противном случае он возвращает false.
Возьмем три логические
переменные:
boolean trueBool = true;
boolean anotherTrueBool = true;
boolean falseBool = false;
Далее применим побитовый оператор AND к переменным trueBool
и AnotherTrueBool
:
boolean trueANDtrue = trueBool & anotherTrueBool;
Тогда результат будет верным
.
Далее применим побитовый оператор И к trueBool
и falseBool
:
boolean trueANDFalse = trueBool & falseBool;
В этом случае результат будет ложным
.
Давайте посмотрим тестовый Java-код:
boolean trueBool = true;
boolean anotherTrueBool = true;
boolean falseBool = false;
boolean trueANDtrue= trueBool & anotherTrueBool;
boolean trueANDFalse = trueBool & falseBool;
assertTrue(trueANDtrue);
assertFalse(trueANDFalse);
3. Использование логического И
Как и
оператор логического И ( &&
), он сравнивает значения двух логических переменных или выражений. И он также возвращает true
, только если оба операнда истинны
, в противном случае он возвращает false
.
Возьмем три логические
переменные:
boolean trueBool = true;
boolean anotherTrueBool = true;
boolean falseBool = false;
Далее применим логический оператор И к переменным trueBool
и AnotherTrueBool
:
boolean trueANDtrue = trueBool && anotherTrueBool;
Тогда результат будет верным
.
Далее применим логический оператор И к trueBool
и falseBool
:
boolean trueANDFalse = trueBool && falseBool;
В этом случае результат будет ложным
.
Давайте посмотрим тестовый Java-код:
boolean trueBool = true;
boolean anotherTrueBool = true;
boolean falseBool = false;
boolean anotherFalseBool = false;
boolean trueANDtrue = trueBool && anotherTrueBool;
boolean trueANDFalse = trueBool && falseBool;
boolean falseANDFalse = falseBool && anotherFalseBool;
assertTrue(trueANDtrue);
assertFalse(trueANDFalse);
assertFalse(falseANDFalse);
3.1. Короткое замыкание
Итак, какая разница? Ну, оператор &&
закорачивает. Это означает, что он не оценивает правый операнд или выражение, когда левый операнд или выражение имеет значение false
.
Возьмем два выражения, которые оцениваются как ложные:
First Expression: 2<1
Second Expression: 4<5
Когда мы применяем логический оператор И к выражениям 2<1
и 4<5,
он оценивает только первое выражение 2<1
и возвращает false.
boolean shortCircuitResult = (2<1) && (4<5);
assertFalse(shortCircuitResult);
3.2. Использование && с целыми числами
Мы можем использовать оператор & с логическими или числовыми типами, но && можно использовать только с логическими операндами. Использование его с целочисленными операндами приводит к ошибке компиляции:
int five = 2;
int six = 4;
int result = five && six;
4. Сравнение
- Оператор & всегда оценивает оба выражения, тогда как оператор && оценивает второе выражение, только если первое
истинно .
- & сравнивает каждый операнд побитово, тогда как && работает только с логическими значениями
5. Вывод
В этой статье мы использовали побитовый оператор &
для сравнения битов двух цифр, в результате чего получается новая цифра. Кроме того, мы использовали логический оператор &&
для сравнения двух логических значений, в результате чего было получено логическое значение.
Мы также увидели некоторые ключевые различия между двумя операторами.
Как всегда, вы можете найти код для этого руководства на GitHub .