Boolean expression order of evaluation in Java?
Solution 1
However, I know some that some compilers will exit the boolean expression entirely if the first condition fails. Is this true with Java?
Yes, that is known as Short-Circuit evaluation.Operators like &&
and ||
are operators that perform such operations.
Or is the order of evaluation not guaranteed?
No,the order of evaluation is guaranteed(from left to right)
Solution 2
Java should be evaluating your statements from left to right. It uses a mechanism known as short-circuit evaluation to prevent the second, third, and nth conditions from being tested if the first is false.
So, if your expression is myContainer != null && myContainer.Contains(myObject)
and myContainer
is null, the second condition, myContainer.Contains(myObject)
will not be evaluated.
Edit: As someone else mentioned, Java in particular does have both short-circuit and non-short-circuit operators for boolean conditions. Using &&
will trigger short-circuit evaluation, and &
will not.
Solution 3
James and Ed are correct. If you come across a case in which you would like all expressions to be evaluated regardless of previous failed conditions, you can use the non-short-circuiting boolean operator &
.
Solution 4
Yes, Java practices lazy evaluation of if statements in this way. if myString==null, the rest of the if statement will not be evaluated
daveslab
An ex-junior web developer, trained as Unix/C/C++ developer, and currently trying to be a Java/Python/Oracle nut. Programmer enthusiast, and general hacker with a fond affinity for asking and answering questions.
Updated on December 14, 2020Comments
-
daveslab over 3 years
Suppose I have the following expression
String myString = getStringFromSomeExternalSource(); if (myString != null && myString.trim().length() != 0) { ... }
Eclipse warns me that
myString
might be null in the second phrase of the boolean expression. However, I know some that some compilers will exit the boolean expression entirely if the first condition fails. Is this true with Java? Or is the order of evaluation not guaranteed?