哪个方法编译器先执行?
Which method compiler executes first?
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; }
顺序如何根据编译器而变化?
除非另有修改,否则评估是从左到右的。所以在这种情况下,f(++i) 先行。
编辑:正如@sanA 指出的那样,可能会有编译器优化。在您的情况下,这不太可能(但并非不可能),因为您的功能可能属于副作用。
Which method compiler executes fist?
执行指令的不是编译器,而是JVM。
而Java编程语言保证运算符的操作数由JVM从左到右求值。来自 JLS Sec 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.
关于编译器是否会重新组织编译后的等价表达式的顺序class,可能是"optimization"的原因。这些可能会从一个 Java 版本更改为另一个版本,因此通常您甚至不应该考虑它。
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; }
顺序如何根据编译器而变化?
除非另有修改,否则评估是从左到右的。所以在这种情况下,f(++i) 先行。
编辑:正如@sanA 指出的那样,可能会有编译器优化。在您的情况下,这不太可能(但并非不可能),因为您的功能可能属于副作用。
Which method compiler executes fist?
执行指令的不是编译器,而是JVM。
而Java编程语言保证运算符的操作数由JVM从左到右求值。来自 JLS Sec 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.
关于编译器是否会重新组织编译后的等价表达式的顺序class,可能是"optimization"的原因。这些可能会从一个 Java 版本更改为另一个版本,因此通常您甚至不应该考虑它。