1 回答
UYOU
TA贡献1878条经验 获得超4个赞
15.26.1。简单赋值运算符 =
如果左侧操作数是数组访问表达式(第 15.10.3 节),可能包含在一对或多对括号中,则:
首先,计算左侧操作数数组访问表达式的数组引用子表达式。如果这个评估突然完成,那么赋值表达式也会因为同样的原因突然完成;索引子表达式(左侧操作数数组访问表达式的)和右侧操作数不被求值,也不发生赋值。
否则,计算左侧操作数数组访问表达式的索引子表达式。如果此求值突然完成,则赋值表达式会出于同样的原因突然完成,并且不会对右侧操作数进行求值,也不会发生赋值。
我假设评估顺序应该如下
a[i++] = a[i++] + 2;
^ ^ ^
1 3 2
----------
^
4
------
^
5
--------------------
^
6
我们可以通过运行这段代码来证明这一点
int[] a = {0, 10, 0, 0};
int i = 0;
a[i++] = a[i++] + 2;
System.out.println(Arrays.toString(a)); // [12, 10, 0, 0]
System.out.println(i); // 2
添加回答
举报
0/150
提交
取消