int i = 10, j = 5, k;
k = f(++i) + g(++i) + j+ 25;
是先计算
f(++i)
还是g(++i)
?
不运行程序你怎么知道?
假设
f
和 g
类似于
int f(int a)
{ return a; }
顺序如何根据编译器而变化?
编译器首先执行哪个方法?
执行指令的不是编译器,而是JVM。
Java 编程语言保证 JVM 从左到右计算运算符的操作数。来自JLS Sec 15.7:
Java 编程语言保证运算符的操作数似乎按特定的求值顺序(即从左到右)求值。
关于编译器是否会重新组织编译后的类中等价表达式的顺序,可能是出于“优化”的原因。这些可能会从一个 Java 版本更改为另一个版本,因此通常您甚至不应该考虑它。
除非另有修改,评估是从左到右的。 所以在这种情况下,f(++i) 优先。
编辑:正如@sanA 指出的,可能存在编译器优化。 在你的情况下,这不太可能(但并非不可能),因为你的函数可能符合副作用。