Более высокий приоритет &&
означает, что
foo(true, 2) || foo(true, 3) && foo(true, 1)
- это то же самое, что и
foo(true, 2) || (foo(true, 3) && foo(true, 1))
, но не
(foo(true, 2) || foo(true, 3)) && foo(true, 1)
Ничего другого.Это ничего не значит о порядке оценки.
Теперь для большинства операторов оценка x op y
требует оценки как x
, так и y
.Если бы ||
был одним из них, он был бы таким же, как (return
от оценки ||
, а не от всего метода)
boolean tmp1 = foo(true, 2);
boolean tmp2 = foo(true, 3) && foo(true, 1);
return tmp1 || tmp2;
и &&
действительно "пошли бы первым».Но есть три оператора, которые не работают так: &&
, ||
и ?:
.Вместо этого вы получите
boolean tmp1 = foo(true, 2);
if (tmp1) {
return true;
} else {
return foo(true, 3) && foo(true, 1);
}