Почему следующий код не генерирует IndexOutOfBoundsException, а выводит 9 9 6? - PullRequest
7 голосов
/ 28 июля 2011

Я новичок в Java.У меня были сомнения.

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
  } 
} 

Ответы [ 2 ]

8 голосов
/ 28 июля 2011

Это еще один хороший пример, который применимо к большому правилу оценки Java.

Java разрешает адреса слева направо.a[i], который является адресом a[0], затем i, который является адресом i, затем назначьте 9 для i, затем присвойте 9 для a[0].

IndexOutOfBoundsException никогда не будет выброшено, поскольку a[0] это не вне пределов .
Это неправильное представление a[9], что против слева направо властвуй

0 голосов
/ 28 июля 2011

Не должно.

a [i] = i = 9 (делает меня равным 9) a [0] также должно быть 9, поскольку вы присвоили ему 9 (a [i] = i = 9), изначально a [0] было 3 и [1] равно 6 (начальное значение (int [] a = {3, 6};)

Вы должны получить 9 9 6.

Если вы сделаете [2], то он выдаст вам исключение IndexOutOfBoundsException.

...