Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

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.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
432 views
Welcome To Ask or Share your Answers For Others

1 Answer

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...


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...