Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

sequence points in java

Is there a guaranteed sequence of execution of the following java code:

int i = getA() + getB();

Is getA() always executed before getB(), as any average person would expect?

like image 816
milan Avatar asked Dec 04 '10 09:12

milan


1 Answers

Yes, it is. From the JLS, section 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.

It is recommended that code not rely crucially on this specification. Code is usually clearer when each expression contains at most one side effect, as its outermost operation, and when code does not depend on exactly which exception arises as a consequence of the left-to-right evaluation of expressions.

...

The left-hand operand of a binary operator appears to be fully evaluated before any part of the right-hand operand is evaluated.

and also:

The Java programming language also guarantees that every operand of an operator (except the conditional operators &&, ||, and ? :) appears to be fully evaluated before any part of the operation itself is performed.

like image 180
Jon Skeet Avatar answered Sep 28 '22 08:09

Jon Skeet