I have the following snippet of code:
int x=2,y=3;
if ( (y == x++) | (x < ++y) )
// rest of code
I know that in C++ you're taught not to rely on evaluation order of subexpression,because it's not guaranteed to be any order at all. So this code would be in error,and the boolean yielded by the expression in the condition is not guaranteed to be true ( y could be incremented before it is evaluated in the first equality test,for example ). Since I read this code in a Java certification book,I assume that this isn't the case with Java..I mean, am I guaranteed that order of evaluation in Java is always left to right? So the above expression should always yield true.
Yes, it's guaranteed to be executed from left to right - or at least, act as if it is. This is defined in JLS 15.7:
The Java programming language guarantees that the operands of operators appear to be evaluated in a specific evaluation order, namely, from left to right.
The first operand of the |
operator will evaluate 3 == 2, and yield false, but the second operand will evaluate 3 < 4, and yield true.
Having said that, I would definitely avoid code that requires that much careful reading...
See more on this question at Stackoverflow