java - 运算顺序对增量运算符的影响

标签 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,因为乘法优先于加法?

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

最佳答案

在 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 中,ab 之前计算,而在 x*yxy 之前计算。

您有一个 p + (q * r) 形式的表达式。根据上述规则,p 必须在 (q * r) 之前计算。并且在计算q * r时,q必须在r之前计算。因此必须评估p,然后评估q,然后评估r

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

关于java - 运算顺序对增量运算符的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32960100/

相关文章:

java - RxJava 背压(快速生产者慢消费者)

MySQL增加值并选择结果

lua - 每场比赛的 LPeg 增量

带有增量的 Java return 语句 - 一般行为是什么?

javascript - while 循环中的条件表达式未按预期工作

c# - 用 Java 或 C# 编写 Selenium 测试

java - LibGDX 在暂停时停止时间计数器

java - libjna-jni、libjna-java 库和 Java 之间的相互关系是什么

java - 如何通过发送和接收数据包手动获取网站的 IP 地址抛出 Google DNS、OpenDNS...

@for 语句中的 SASS 多个增量值