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
提交
取消