2011-07-28 4 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 평가 규칙이 적용되는 또 다른 좋은 예입니다.

Java는 주소를 왼쪽에서 오른쪽으로 해석합니다. 주소가 a[0]a[i], 그 다음 i는 i의 주소이며, 9를 i에 할당 한 다음 9를 a[0]에 할당합니다.

IndexOutOfBoundsExceptiona[0]이 아닌이므로 절대로 던지지 않습니다.
오해가 반대하는 a[9]왼쪽에서 오른쪽 규칙 그것은 안

0

.

a [i] = i = 9 (i는 9와 같음) 9를 지정 했으므로 a [i]도 9가되어야합니다 (a [i] = i = 9) 3 와 [1] 6 (초기 값 (INT [] A = {3, 6}이었다 당신이 [2] 다음 할 경우)

당신은 9 9 6

를 얻어야한다 그것은