【发布时间】:2018-02-27 16:33:35
【问题描述】:
[ ] 优先级最高(无论如何高于 +)。但在 表达式的 RHS 中,第一个(最左边的)被加数 (i) 在第二个被加数 arr1[i++] 之前计算,因为 arr1[i++] 的 i++ 不影响第一个(最左边)的值summand(i 为 1 且未更改)。
我无法严格解释为什么不首先评估更高优先级 [ ]。
int[] arr = { 0, 0, 0 };
int i = 1;
i = i + arr[i++] + arr[i++];
System.out.println(i); // output is zero
【问题讨论】:
-
我会非常警惕这样写的代码。
-
你为什么要写这样不可读的代码?检查你的假设。 JVM 知道它在做什么。
-
你怎么知道操作是按特定顺序完成的?我们来看看数组的内容和
i的最终值 -
我希望这个认证问题有像
z) Just don't do this -- ever.这样的答案 -
@inqi777 不,这不是你的问题。您的问题是为什么不首先评估
[]。
标签: java language-lawyer operator-precedence