【发布时间】:2021-05-16 21:06:27
【问题描述】:
为什么在java中这段代码输出1:
int bracketsTest = 0;
int resultBrackets = 1 + bracketsTest + bracketsTest++; // return 1
但这输出 2:
int bracketsTest = 0;
int resultBrackets = 1 + bracketsTest++ + bracketsTest; // return 2
我生活在两个 sn-ps 应该相等的世界中,因为在两个结果中我们都执行以下操作:
- 1 + 0 + 括号测试 // 括号测试 = 0 我们将零放在括号测试++中,然后括号测试 = 1
- 1 + 0 + 1 = 2 // 我们将括号Test = 1 放在最后一个参数中
但事实证明递增/递减操作不是最高优先级操作? (因为我们在代码 sn-p 中放置括号测试的位置很重要)
【问题讨论】:
-
第一个执行
1 + 0 + 0。最后一个执行1 + 0 + 1,因为在读取最后一个加数(+ bracketsTest;)之前变量已经递增。我确定 JLS 准确地指定了这个 sn-p 必须在某处执行的顺序(在这种情况下从左到右)。 -
您似乎在混合运算符优先级和评估顺序?
++的优先级高于+,但在 Java 中评估顺序始终是从左到右。 -
任何 ++ 符号表示您递增变量,因此如果您使用
++bracketsTest这意味着您将递增它然后使用它,如果您使用bracketsTest++这意味着我将使用它现在使用旧值,然后在任何下一次使用中,我将使用增量值。所以在第二个例子中,你增加了它并在之后使用它,所以你将拥有增加的值,这就是为什么第二个例子显示 2 并且首先显示 1
标签: java operator-precedence evaluation post-increment jls