Мне просто интересно, почему мы обычно используем логическое ИЛИ ||
между двумя логическими значениями, а не побитовое ИЛИ |
, хотя оба они работают хорошо.
Я имею в виду, посмотрите на следующее:
if(true | true) // pass
if(true | false) // pass
if(false | true) // pass
if(false | false) // no pass
if(true || true) // pass
if(true || false) // pass
if(false || true) // pass
if(false || false) // no pass
Можем ли мы использовать |
вместо ||
? То же самое с &
и &&
.
Смотрите на:
http://java.sun.com/docs/books/tutorial/java/nutsandbolts/operators.html
| является поразрядно содержащим, ИЛИ
|| логично ИЛИ
|| возвращает булево значение OR'ing два значения (Thats почему его известное как ЛОГИЧЕСКОЕ или)
IE:
if (A || B)
возвратил бы true, если или A или B являются верными, или ложными, если они - оба ложь.
| оператор, который выполняет битовую операцию на двух значениях. Для лучше понимания битовых операций можно читать здесь:
В дополнение к тому, что | побитовый оператор: || оператор короткого замыкания - когда один элемент будет ложью, он не проверит другие.
if(something || someotherthing)
if(something | someotherthing)
, если что-то ПРАВДА, ||, не оценит someotherthing, в то время как | сделает. Если переменные в Ваших операторах "if" являются на самом деле вызовами функции, использование || возможно сохраняет большую производительность.
| b: оцените b в любой случай
|| b: оцените b только если оценивание ко лжи
|
не делает оценка короткого замыкания в булевых выражениях. ||
прекратит оценивать, если первый операнд будет верен, но |
не будет.
, Кроме того, |
может использоваться для выполнения операции битового "ИЛИ" на значениях байта/закорачивать/интервала/длинного. ||
не может.
| побитовый оператор. || логический оператор.
Каждый возьмет два бита и или их.
Каждый определит истину (это ИЛИ что), Если это будет верно, или это верно, то ответ верен.
, О, и блин люди отвечают на эти вопросы быстро.
| is the binary or operator
|| is the logic or operator
|| логическое или оператор, в то время как | поразрядное или оператор.
boolean a = true;
boolean b = false;
if (a || b) {
}
int a = 0x0001;
a = a | 0x0002;
После тщательного чтения этой темы все еще неясно мне при использовании |
, как логический оператор, соответствуют методам шаблона Java.
я недавно изменил код в запросе получения по запросу, обратившись к комментарию, где
if(function1() | function2()){
...
}
должен был быть изменен на
boolean isChanged = function1();
isChanged |= function2();
if (isChanged){
...
}
, Что фактической является принятая версия?
документация Java не упоминание
|
как логическая операция ИЛИ незамыкания накоротко.
Не заинтересованный голосованием, но больше обнаружением стандарта?! Обе версии кода компилируют и работают как ожидалось.
Примечание: в Java есть | =, но нет || =
Пример того, когда вы должны использовать || это когда первое выражение является тестом, чтобы увидеть, взорвется ли второе выражение. например Используя одиночный | в следующем случае может возникнуть NPE.
public static boolean isNotSet(String text) {
return text == null || text.length() == 0;
}