Java 为什么最高优先级操作[]不首先计算ini=i+;arr[i+;+;]+;arr[i+;+;]?
[]优先级最高(无论如何高于+)。但在RHS中,第一个(最左侧)和(i)下面的表达式在第二个和arr1[i++]之前求值,因为arr1[i++]的i++不影响第一个(最左侧)和(i为1且未更改)的值 我无法严格解释为什么不首先评估更高优先级[]Java 为什么最高优先级操作[]不首先计算ini=i+;arr[i+;+;]+;arr[i+;+;]?,java,language-lawyer,operator-precedence,Java,Language Lawyer,Operator Precedence,[]优先级最高(无论如何高于+)。但在RHS中,第一个(最左侧)和(i)下面的表达式在第二个和arr1[i++]之前求值,因为arr1[i++]的i++不影响第一个(最左侧)和(i为1且未更改)的值 我无法严格解释为什么不首先评估更高优先级[] int[] arr = { 0, 0, 0 }; int i = 1; i = i + arr[i++] + arr[i++]; System.out.println(i); // output is zero 坦白说,这正是我所期望的。运算符优先级似
int[] arr = { 0, 0, 0 };
int i = 1;
i = i + arr[i++] + arr[i++];
System.out.println(i); // output is zero
坦白说,这正是我所期望的。运算符优先级似乎正确 给定此示例代码,我们希望结果不会为负
int[] arr = {-1000, 100, 150};
int i = 1;
i = i + arr[i++] + arr[i--];
System.out.println(i);
下面是发生的情况
从右向左关联,但其优先级低于+
,因此尚未调用它[]
首先解析,结果是arr[i++]
,其中100
i==2
下一步解析,结果为arr[i--]
,其中150
i==1
从左到右解析下一步,并添加+
150+100+1
- 然后,答案变为251
在
i++
之前,最左边的操作数被计算为1
,我会非常小心用这种方式编写的代码。为什么要编写这样不可读的代码?检查你的假设。JVM知道它在做什么。您如何知道操作是按特定顺序完成的?让我们看看数组的内容和i
的最终值。我希望这个认证问题的答案是z)永远不要这样做。
@inqi777不,那不是你的问题。您的问题是为什么不首先计算[]
。请参阅我添加到文章中的示例…对于您的示例,输出为1。我不知道你是怎么搞的。。。