Java OR operator precedence
Solution 1
The Java ||
operator (logical or operator) does not evaluate additional arguments if the left operand is true
. If you wanted to do that, you can use |
(bitwise or operator), although, according to the name, this is a little of a hack.
http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.23
Thus, && computes the same result as & on boolean operands. It differs only in that the right-hand operand expression is evaluated conditionally rather than always.
http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.24
Thus, || computes the same result as | on boolean or Boolean operands. It differs only in that the right-hand operand expression is evaluated conditionally rather than always.
Extra: it is considered bad programming style to depend on these semantics to conditionally call code with side effects.
Solution 2
c
won't be checked. To prove this, you can use the following code:
boolean a() {
System.out.println("a")
return false;
}
boolean b() {
System.out.println("b")
return true;
}
boolean c() {
System.out.println("c")
return true;
}
void test() {
if(a() || b() || c()) {
System.out.println("done")
}
}
The output will be:
a
b
done
Solution 3
if (a || b || c)
for you case,
a is true then b and c not checked.
a is false and b is true then c not checked.
a and b are false then c is checked.
the left side of the operator is evaluated first
Comments
-
Szymon Toda almost 2 years
How to chain conditional statements in Java in a way that if
b
is false, than do not checkc
?If
a
andc
are false, andb
is true, doesc
will be checked?if (a || b || c)
I am looking for similar feature that PHP holds with difference between
OR
and||
-
Szymon Toda over 10 yearsSometimes it's needed if you want to squeeze performance out of your program
-
Silly Freak over 10 yearsah, I thought you were talking about
if(isAlright || doSomething()) ...
and not aboutif(firstCondition || expensiveSecondCondition()) ...
. The first is a method with side effects, the second is just an expensive function without side effect. I'd say that the second one is fine anyway. -
Szymon Toda over 10 yearsStill it's shady and not readable-frendly but still sometimes you just have to meet the specs ;-)