Pacerier - 2 months ago 8

Java Question

Consider this function:

`public static final int F(int a, int b) {`

a = a - 1 + b;

// and some stuff

return a;

}

Is it required for implementations of JVMs to execute

`- 1`

`+ b`

If we have a system profiler attached to the JVM, will we see the

`+ b`

`+ 1`

Answer

Actually, I will disagree with the rest of the answers. The JLS §15.7 that people are referring to discusses the evaluation of operands. That is, in the expression

```
x = foo() - 1 + bar()
```

, in which order will the methods be invoked.

The relevant section is §15.7.3, which specifies

An implementation

may nottake advantage of algebraic identities such as the associative law to rewrite expressions into a more convenient computational orderunlessit can be proven that the replacement expression isequivalent in value and in its observable side effects[...]

Since the expression `x = x - 1 + q`

is equivalent in all ways to `x = x + q - 1`

, a conforming implementation is allowed to rewrite the expression (if it for some reason should decide that is more efficient).