让我们看下面的代码:
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,因为乘法优先于加法?
换句话说:在包含多个 ++
的单个语句中- 对同一变量的操作,我能保证它们总是从左到右执行吗?
最佳答案
在 Java 中,这是有保证的。
来自Java Language Specification, section 15.7.1 :
The left-hand operand of a binary operator appears to be fully evaluated before any part of the right-hand operand is evaluated.
这意味着在 a+b
中,a
在 b
之前计算,而在 x*y
中x
在 y
之前计算。
您有一个 p + (q * r)
形式的表达式。根据上述规则,p
必须在 (q * r)
之前计算。并且在计算q * r
时,q
必须在r
之前计算。因此必须评估p
,然后评估q
,然后评估r
。
(请注意,此行为不同于 C 和 C++)
关于java - 运算顺序对增量运算符的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32960100/