В чем разница между & и && в Java? - PullRequest
145 голосов
/ 06 апреля 2011

Я всегда думал, что оператор && в Java используется для проверки того, являются ли оба его булевых операнда true, а оператор & используется для побитовых операций над двумя целочисленными типами.

Недавно я узнал, что оператор & также может использоваться для проверки того, являются ли оба его булевых операнда true, с той лишь разницей, что он проверяет операнд RHS, даже если операнд LHS имеет значение false.

Оператор & в Java перегружен?Или за этим стоит какая-то другая концепция?

Ответы [ 13 ]

3 голосов
/ 16 мая 2013

С логическими значениями нет никакой разницы между ними.Вы можете поменять местами && и & или ||и |и это никогда не изменит результат вашего выражения.

Разница заключается в сцене, где обрабатывается информация.Когда вы правите выражение "(a! = 0) & (b! = 0)" для a = 0 и b = 1, происходит следующее:

left side: a != 0 --> false
right side: b 1= 0 --> true
left side and right side are both true? --> false
expression returns false

Когда вы пишете выражение (a != 0) && ( b != 0)когда a = 0 и b = 1, происходит следующее:

a != 0 -->false
expression returns false

Меньше шагов, меньше обработки, лучше кодирование, особенно когда выполняется много логических выражений или сложных аргументов.

0 голосов
/ 13 февраля 2017

все ответы great, и, похоже, no больше ответов is needed, но я просто хотел кое-что указать на оператор && с именем dependent condition

В выражениях, использующих оператор &&условие, которое мы назовем dependent condition, может требовать выполнения другого условия, чтобы оценка зависимого условия была значимой.

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

Рассмотрим выражение (i != 0) && (10 / i == 2).Зависимое условие (10 / i == 2) должно appear after оператор && для предотвращения возможности деления на ноль.

другой пример (myObject != null) && (myObject.getValue() == somevaluse)

и еще одна вещь: && и || называются оценка короткого замыкания , потому что второй аргумент выполняется или оценивается only if аргумент first делает not suffice до determine value expression

Ссылки: Как программировать на Java ™ (ранние объекты), десятое издание

0 голосов
/ 10 ноября 2016

& - это побитовый оператор плюс, который используется для проверки обоих условий, потому что иногда нам нужно оценить оба условия. Но && логический оператор переходит во 2-е условие, когда первое условие дает true.

...