Рубрики
Без рубрики

Побитовые & vs Логические && Операторы

Узнайте разницу между & и && в Java

Автор оригинала: baeldung.

1. введение

На Яве у нас есть два способа сказать “И”. Но что использовать?

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

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

Побитовый оператор И (&) сравнивает каждую двоичную цифру двух целых чисел и возвращает 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. Использование & с логическими значениями

Кроме того, мы можем использовать побитовый оператор И ( & ) с логическими операндами. Он возвращает true только в том случае , если оба операнда являются true , в противном случае он возвращает false.

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

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

Далее, давайте применим побитовый оператор И к переменным true Bool и другой True Bool :

boolean trueANDtrue = trueBool & anotherTrueBool;

Тогда результатом будет true .

Далее, давайте применим побитовый оператор И к true Bool и false Bool :

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. Использование логических И

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

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

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

Далее, давайте применим логический оператор И к переменным true Bool и другой True Bool :

boolean trueANDtrue = trueBool && anotherTrueBool;

Тогда результатом будет true .

Далее, давайте применим логический оператор И к true Bool и false Bool :

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. Короткое замыкание

Так в чем же разница? Ну, |/& & короткое замыкание оператора. Это означает, что он не вычисляет правый операнд или выражение, когда левый операнд или выражение 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. Сравнение

  1. Оператор & всегда вычисляет оба выражения, в то время как оператор && вычисляет второе выражение только в том случае, если первое имеет значение true
  2. & сравнивает каждый операнд побитово, тогда как && работает только с логическими значениями

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

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

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

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