问题
Lets say I have the following condition:
if ( myList == null || myList.isEmpty() || xomeX == someY )
What is the order of the evaluation of these conditions? Left or right, right to left or random each time?
If the first one passes, then the others are ignored?
回答1:
It should be always be left to right except the assignment operator =
. You are using short circuit OR
operator , hence if the first condition is true
, rest of them won't be evaluated.
JLS 15.24:
The conditional-or operator is syntactically left-associative (it groups left-to-right).
At run time, the left-hand operand expression is evaluated first; if the result has type Boolean, it is subjected to unboxing conversion (§5.1.8).
If the resulting value is true, the value of the conditional-or expression is true and the right-hand operand expression is not evaluated.
回答2:
From the JLS
At run time, the left-hand operand expression is evaluated first [...] If the resulting value is true, the value of the conditional-or expression is true and the right-hand operand expression is not evaluated.
回答3:
if ( myList == null || myList.isEmpty() || xomeX == someY )
Yes the evaluation is from left to right!
and
If the first condition is true next condition is not evaluated. This concept is called Short-circuit evaluation. You can read more on this here. Similar SO question posted earlier is Java logical operator short-circuiting
回答4:
1) left to right
2) in this case, if one condition is true, it doesn't evaluate the rest. so if myList
is null, it won't throw a NullPointerException
evaluating myList.isEmpty()
(because it won't evaluate it)
回答5:
Every operator has its own precedence and associativity.
These links are enough to answer your question.
回答6:
|| is the short-circuit OR operator, that means that conditions are strictly evaluated from left to right, and this checking process stops on first true result.
来源:https://stackoverflow.com/questions/17923872/condition-evaluation-process-in-java