亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

假設 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 關注
  • 136 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號