Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
455 views
in Technique[技术] by (71.8m points)

c++ - order of evaluation of subexpressions in a Java expression

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

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

1 Reply

0 votes
by (71.8m points)

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...