Привет, у меня есть этот пример:
(1)
if(false && false ||true){
System.out.println("a");
}
результат:
a
а также
(2)
if(false && false | true){
System.out.println("a");
}
результат:
(empty)
В случае (1) имеем короткое замыкание ИЛИ, но во втором мы имеем длинное замыкание ИЛИ. Откуда происходит различие в поведении? Я знаю, что выражение оценивается слева направо, и И имеет больший приоритет, чем OR, поэтому я не могу понять, почему это происходит в случае 2?
(1)
if (false && false || true) {
System.out.println("a");
}
Здесь &&
имеет более высокий приоритет, чем ||
false && false
получает сначала результат, полученный false
.false || true
false || true
получает оцениваемый результат true
.Таким образом, результат выводит "a".
(2)
if (false && false | true) {
System.out.println("a");
}
Здесь |
имеет более высокий приоритет, чем &&
false | true
false | true
сначала оценивается, в результате получается true
.false && true
получает оценку, которая возвращает false
.Поэтому ничего не выводится.
Надеюсь, что это имеет смысл
&&
имеет приоритет над ||
но не более |
, См. Список приоритетов операторов.