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?
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)
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.
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 &
.
Yes, Java practices lazy evaluation of if statements in this way. if myString==null, the rest of the if statement will not be evaluated