order of evaluation of subexpressions in a Java expression
Asked Answered
B

1

4

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.

Bookerbookie answered 24/9, 2015 at 7:25 Comment(5)
"I mean, am I guaranteed that order of evaluation in Java is always left to right". Yes.Tenotomy
google.com/…Nethermost
it's fun that googling sends me back to stackoverflow :DBookerbookie
don't forget | is different from ||Gloze
@Gloze yes;i know that. They have different meaning and different precedence too! ( | has higher precedence,I see..)Bookerbookie
T
7

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

Tenotomy answered 24/9, 2015 at 7:28 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.