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. Сравнение
- Оператор & всегда вычисляет оба выражения, в то время как оператор && вычисляет второе выражение только в том случае, если первое имеет значение true
- & сравнивает каждый операнд побитово, тогда как && работает только с логическими значениями
5. Заключение
В этой статье мы использовали побитовый оператор & для сравнения битов двух цифр, в результате чего получилась новая цифра. Кроме того, мы использовали логический оператор && для сравнения двух логических значений, в результате чего получилось логическое значение.
Мы также увидели некоторые ключевые различия между двумя операторами.
Как всегда, вы можете найти код для этого урока на GitHub .