Я всегда думал, что &&
оператор в Java используется для проверки, являются ли оба его булевых операнда true
, и этот &
оператор используется для побитовых операций над двумя целочисленными типами.
Недавно я узнал, что &
оператор также может использоваться для проверки того, являются ли оба его булевых операнда true
единственным отличием в том, что он проверяет операнд RHS, даже если операнд LHS имеет значение false.
Является ли &
внутренне перегруженный оператор в Java? Или за этим стоит какая-то другая концепция?
java
operators
boolean
bitwise-operators
Сообщество
источник
источник
Ответы:
& <- проверяет оба операнда
&& <- прекращает оценку, если первый операнд оценивается как ложный, так как результат будет ложным
(x != 0) & (1/x > 1)
<- это значит оценить,(x != 0)
затем оценить,(1/x > 1)
затем выполнить &. проблема в том, что для x = 0 это вызовет исключение.(x != 0) && (1/x > 1)
<- это означает, что оценивать,(x != 0)
и только если это правда, затем оценивать,(1/x > 1)
поэтому, если у вас есть x = 0, тогда это совершенно безопасно и не выдает никакого исключения, если (x! = 0) оценивает как ложное, все это непосредственно оценивается как ложное без оценки(1/x > 1)
.РЕДАКТИРОВАТЬ:
exprA | exprB
<- это значит оценить,exprA
затем оценить,exprB
затем сделать|
.exprA || exprB
<- это значит оцениватьexprA
и только если этоfalse
потом оцениватьexprB
и делать||
.источник
Помимо того, что я не ленивый оценщик, оценивая оба операнда, я думаю, что основные характеристики побитовых операторов сравнивают каждый байт операндов, как в следующем примере:
источник
источник
Это зависит от типа аргументов ...
Для целочисленных аргументов один амперсанд ("&") является побитовым оператором AND. Двойной амперсанд ("&&") не определен ни для чего, кроме двух логических аргументов.
Для логических аргументов одиночный амперсанд составляет (безусловный) оператор «логического И», в то время как двойной амперсанд («&&») является оператором «условного логического И». То есть, один амперсанд всегда оценивает оба аргумента, тогда как двойной амперсанд будет оценивать второй аргумент только в том случае, если первый аргумент истинен.
Для всех других типов аргументов и комбинаций должна произойти ошибка времени компиляции.
источник
&& является оператором короткого замыкания, тогда как & является оператором AND.
Попробуй это.
источник
это как указано в JLS (15.22.2) :
«Хитрость» в том, что
&
это целочисленный побитовый оператор, а также логический логический оператор . Так почему бы и нет, рассмотрим это как пример для перегрузки операторов .источник
Я думаю, что мой ответ может быть более понятным:
Есть два различия между
&
и&&
.Если они используют как логическое И
&
и&&
может быть логичнымAND
, когда результат выражения&
or или&&
left и right все true, весь результат операции может быть true.когда
&
и&&
как логичноAND
, есть разница:при использовании в
&&
качестве логическогоAND
, если результат левого выражения равен false, правое выражение не будет выполнено.Возьмите пример:
При использовании
&
:Еще один пример:
& может использоваться как битовый оператор
&
может использоваться как побитовыйAND
оператор,&&
не может.Со страницы вики:
http://www.roseindia.net/java/master-java/java-bitwise-and.shtml
источник
'&&': - это логический оператор AND, который выдает логическое значение true или false, основываясь на логической взаимосвязи его аргументов.
Например: - Условие1 && Условие2
Если Condition1 имеет значение false, то (Condition1 && Condition2) всегда будет иметь значение false, поэтому этот логический оператор также известен как оператор короткого замыкания, поскольку он не оценивает другое условие. Если Условие 1 ложно, тогда нет необходимости оценивать Condtiton2.
Если Условие1 истинно, то Условие2 оценивается, если оно истинно, тогда общий результат будет истинным, иначе он будет ложным.
'&': - является побитовым оператором AND. Он выдает единицу (1) на выходе, если оба входных бита равны единице. В противном случае он производит ноль (0).
Например:-
int a = 12; // двоичное представление 12 равно 1100
int b = 6; // двоичное представление 6 - 0110
int c = (a & b); // двоичное представление (12 и 6) - 0100
Значение с 4.
для справки см. этот http://techno-terminal.blogspot.in/2015/11/difference-between-operator-and-operator.html
источник
&&
и||
называются операторами короткого замыкания. Когда они используются, для||
- если первый операнд оценивается какtrue
, то остальные операнды не оцениваются. Для&&
- если первый операнд оценивается какfalse
, остальные из них вообще не оцениваются.поэтому
if (a || (++x > 0))
в этом примере переменная x не будет увеличена, если a былаtrue
.источник
С логическими значениями нет разницы в выходных данных. Вы можете поменять местами && и & или || и | и это никогда не изменит результат вашего выражения.
Разница заключается в сцене, где обрабатывается информация. Когда вы исправляете выражение «(a! = 0) & (b! = 0)» для a = 0 и b = 1, происходит следующее:
Когда вы пишете выражение,
(a != 0) && ( b != 0)
когда a = 0 и b = 1, происходит следующее:Меньше шагов, меньше обработки, лучше кодирование, особенно когда выполняется много логических выражений или сложных аргументов.
источник
Кроме && и || будучи коротким замыканием, также учитывайте приоритет оператора при смешивании двух форм. Я думаю, что не всем сразу будет очевидно, что result1 и result2 содержат разные значения.
источник
& - побитовый оператор плюс, используемый для проверки обоих условий, потому что иногда нам нужно оценить оба условия. Но && логический оператор переходит во 2-е условие, когда первое условие дает true.
источник
все ответы есть
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 ™ Как программировать (ранние объекты), десятое издание
источник