«1. Введение

В Java есть два способа сказать «И». Но что использовать?

В этом уроке мы рассмотрим различия между \u0026 и \u0026\u0026. Попутно мы узнаем о побитовых операциях и коротких замыканиях.

2. Использование побитового И

Оператор побитового И (\u0026) сравнивает каждую двоичную цифру двух целых чисел и возвращает 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

Оператор \u0026 выполняет логическое И для каждого бита и возвращает новое двоичное число:

0110
0101
-----
0100

Наконец, наш результат — 0100 — можно преобразовать обратно в десятичное число — 4.

Давайте посмотрим на тест Java-код:

int six = 6;
int five = 5;
int resultShouldBeFour = six & five;
assertEquals(4, resultShouldBeFour);

2.1. Использование \u0026 с булевыми операндами

Также мы можем использовать побитовый оператор И (\u0026) с булевыми операндами. Он возвращает истину только в том случае, если оба операнда истинны, в противном случае он возвращает ложь.

Возьмем три булевы переменные:

boolean trueBool = true;
boolean anotherTrueBool = true;
boolean falseBool = false;

Далее применим побитовый оператор AND к переменным trueBool и otherTrueBool:

boolean trueANDtrue = trueBool & anotherTrueBool;

Тогда результат будет истинным.

Далее применим побитовый оператор AND к trueBool и falseBool:

boolean trueANDFalse = trueBool & falseBool;

В этом случае результат будет false.

Давайте посмотрим на тестовый код Java:

boolean trueBool = true;
boolean anotherTrueBool = true;
boolean falseBool = false;

boolean trueANDtrue= trueBool & anotherTrueBool;
boolean trueANDFalse = trueBool & falseBool;

assertTrue(trueANDtrue);
assertFalse(trueANDFalse);

3. Использование логического И

Как и \u0026, логический оператор И (\u0026\u0026) сравнивает значения двух логических переменных или выражений. И он также возвращает истину, только если оба операнда истинны, в противном случае он возвращает ложь.

Возьмем три логические переменные:

boolean trueBool = true;
boolean anotherTrueBool = true;
boolean falseBool = false;

Далее применим логический оператор И к переменным trueBool и otherTrueBool:

boolean trueANDtrue = trueBool && anotherTrueBool;

Тогда результат будет истинным.

Далее применим логический оператор И к trueBool и falseBool:

boolean trueANDFalse = trueBool && falseBool;

В этом случае результат будет false.

Давайте посмотрим на тестовый код 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. Короткое замыкание

Итак, какая разница? Ну, оператор \u0026\u0026 закорачивает. Это означает, что он не оценивает правый операнд или выражение, когда левый операнд или выражение имеет значение false.

Давайте возьмем два выражения, которые оцениваются как ложные:

First Expression: 2<1
Second Expression: 4<5

Когда мы применяем логический оператор И к выражениям 2\u003c1 и 4\u003c5, он оценивает только первое выражение 2\u003c1 и возвращает ложь.

boolean shortCircuitResult = (2<1) && (4<5);
assertFalse(shortCircuitResult);

3.2. Использование \u0026\u0026 с целыми числами

Мы можем использовать оператор \u0026 с логическими или числовыми типами, но \u0026\u0026 можно использовать только с логическими операндами. Использование его с целочисленными операндами приводит к ошибке компиляции:

int five = 2;
int six = 4;
int result = five && six;

4. Сравнение

  1. The & operator always evaluates both expressions, whereas the && operator evaluates the second expression only if the first one is true
  2. & compares each operand bitwise, whereas && operates only on booleans

5. Заключение

В этой статье мы использовали побитовый оператор \u0026 для сравнения битов двух цифр, в результате чего получается новая цифра. . Кроме того, мы использовали логический оператор \u0026\u0026 для сравнения двух логических значений, в результате чего было получено логическое значение.

Мы также увидели некоторые ключевые различия между двумя операторами.

Как всегда, вы можете найти код для этого руководства на GitHub.