操作顺序对增量运算符

时间:2015-10-06 00:54:45

标签: java increment

我们来看下面的代码:

int[] data   = {1, 2, 3};
int   pos    = 0;
int   result = data[pos++] + data[pos++]*data[pos++];

我保证我的result总是1 + 2 * 3,即7,或者Java编译器或JVM可以重新排序data[pos++]语句的执行,例如,我3 + 1 * 2,即5,因为乘法优先于加法?

换句话说:在包含多个++的单个语句中 - 对同一个变量进行操作,我保证它们总是从左到右执行吗?

2 个答案:

答案 0 :(得分:1)

引用Java Language Specification

  

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

答案 1 :(得分:1)

在Java中,这是有保证的。

来自Java Language Specification, section 15.7.1

  

在评估右侧操作数的任何部分之前,二元运算符的左侧操作数似乎已完全评估。

这意味着在a+b中,ab之前进行评估,x*y xy之前进行评估。

您的表达式为p + (q * r)。根据上述规则,必须在p之前评估(q * r)。在评估q * r时,必须在q之前评估r。因此,必须先评估p,然后q,然后r

(请注意,此行为与C和C ++不同)