2011-07-28 27 views
7

我是java新手。我有疑問。爲什麼下面的代碼不會拋出IndexOutOfBoundsException異常,並打印出9 9 6?

class ArrTest{ 
    public static void main(String args[]) 
{ 
    int i = 0; 
    int[] a = {3,6}; 
    a[i] = i = 9; 
    System.out.println(i + " " + a[0] + " " + a[1]); // 9 9 6 
    } 
} 
+1

請注意,明確因爲你(和潛在的其他人)所遇到的困惑,這是*永遠*一個好主意,嘗試像'A [1]「棘手」的代碼=我= 9;'而是將其分解爲單獨的行 - f尿液世代會感謝你。 –

回答

8

這是偉大的Java評估規則適用的另一個很好的例子。

的Java解析地址從左至右。 a[i]這是a[0]地址,然後我這是我的地址,然後分配9至i,然後分配9 a[0]

IndexOutOfBoundsException永遠不會拋出,因爲a[0]不是越界
的誤解是a[9],這是針對左到右規則

0

它不應該。 (a [i] = i = 9),[a] [0]也應該是9,因爲你給它分配了9(a [i] = 9 =爲3 和[1]是6(初始值(INT [] A = {3,6};)

你應該得到9 9 6

如果做一個[2],然後它會給你一個IndexOutOfBoundsException異常。

相關問題