2011-07-28 9 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 [i] = iのようなトリッキーなコードを試してみることはお勧めできません。 = 9; '代わりに、それを独立した行に分解する - f世代があなたに感謝します。 –

答えて

8

これは、優れたJava評価ルールが適用されるもう1つの良い例です。

Javaはアドレスを左から右に解決します。 a[0]のアドレスであるa[i]、次にiがiのアドレスであり、次にiを9に割り当て、次に9をa[0]に割り当てます。

IndexOutOfBoundsExceptiona[0]でないためであるため投げられません。
誤解は、それはいけない左から右へのルールに対して

0

である、a[9]です。 (a [i] = i = 9)、最初にa [0]に9を割り当てたので、[0]も9でなければなりません。次に、[2])

次の作業を行う場合は、9 9 6

を取得する必要があり、(初期値([] = int型{3を、6} 3 し、[1] 6

関連する問題