为了账号安全,请及时绑定邮箱和手机立即绑定

假设 i=0 并且数组的所有元素都初始化为 0 a[i++] = a[i++] + 2;

假设 i=0 并且数组的所有元素都初始化为 0 a[i++] = a[i++] + 2;

aluckdog 2023-05-17 15:07:10
简而言之,我在 java 中遇到了这行代码,我想知道编译器如何划分这段代码a[i++] += 2; a[i++] = a[i++] + 2;
查看完整描述

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


查看完整回答
反对 回复 2023-05-17
  • 1 回答
  • 0 关注
  • 98 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信