Reputation: 4516
How to chain conditional statements in Java in a way that if b
is false, than do not check c
?
If a
and c
are false, and b
is true, does c
will be checked?
if (a || b || c)
I am looking for similar feature that PHP holds with difference between OR
and ||
Upvotes: 9
Views: 64516
Reputation: 4231
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.
Upvotes: 14
Reputation: 3500
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
Upvotes: 1
Reputation: 1306
1) How to chain conditional statements in Java in a way that if b is false, than do not check c?
c
then is immaterialif (a || b)
if (a || (b && c))
2) If a and c are false, and b is true, does c will be checked? [ if (a || b || c) ]
||
does short circuit evaluation. So if a
is false
, b
will be checked and if b
is true, c
won't be checkedFor more on short circuit evaluation: refer
Upvotes: 0
Reputation: 3605
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
Upvotes: 2