哪个方法编译器首先执行?

时间:2017-03-17 06:37:28

标签: java compiler-construction increment post-increment

int i = 10, j = 5, k;

k = f(++i) + g(++i) + j+ 25;

首先计算f(++i)g(++i)吗?

如果不运行程序,你怎么知道?

假设fg

相似
int f(int a)
{ return a; }

订单如何根据编译器而变化?

2 个答案:

答案 0 :(得分:1)

  

哪个方法编译器执行拳头?

执行指令不是编译器,而是JVM。

Java编程语言保证了JVM从左到右评估运算符的操作数。来自JLS Sec 15.7

  

Java编程语言保证运算符的操作数似乎以特定的评估顺序进行评估,即从左到右。

关于编译器是否可以重新组织编译类中的等效表达式的顺序,可能是出于“优化”原因的情况。这些可能会从一个Java版本变为另一个Java版本,因此通常您甚至不应该考虑它。

答案 1 :(得分:0)

除非另有修改,否则评估是从左到右。所以在这种情况下,f(++ i)首先出现。

编辑:正如@sanA指出的那样,可能存在编译器优化。在你的情况下,它不太可能(但并非不可能),因为你的功能可能有资格作为副作用。