Pac*_*ier 11 java jvm operator-precedence jls
考虑这个功能:
public static final int F(int a, int b) {
a = a - 1 + b;
// and some stuff
return a;
}
Run Code Online (Sandbox Code Playgroud)
- 1
以前是否需要执行JVM + b
?
如果我们将一个系统分析器连接到JVM,我们会在+ b
操作之前看到正在执行的+ 1
操作吗?
实际上,我不同意其余的答案.人们所指的JLS§15.7讨论了操作数的评估.也就是说,在表达中
x = foo() - 1 + bar()
Run Code Online (Sandbox Code Playgroud)
,调用方法的顺序.
相关部分是§15.7.3,其中规定了
实现可能无法利用代数身份(如关联法则)将表达式重写为更方便的计算顺序,除非可以证明替换表达式的值与其可观察到的副作用相同 [...]
由于表达式x = x - 1 + q
在所有方面都是等价的,x = x + q - 1
因此允许一致的实现重写表达式(如果由于某种原因应该决定更有效).