a[b] = b = 0;
1) оператор индексирования массива имеет более высокий приоритет, чем оператор присваивания (см. этот ответ ):
(a[b]) = b = 0;
2) Согласно 15.26. Операторы присваивания JLS
Существует 12 операторов присваивания; все они синтаксически правые ассоциативные (они группируются справа налево). Таким образом, a = b = c означает a = (b = c), который присваивает значение c в b, а затем присваивает значение b a.
blockquote>(a[b]) = (b=0);
3) Согласно 15.7. Порядок оценки JLS
Язык программирования Java гарантирует, что операнды операторов, по-видимому, оцениваются в определенном порядке оценки, а именно слева направо.
blockquote>и
Левый операнд двоичного оператора оказывается полностью оцененным до того, как будет оценена любая часть правого операнда.
blockquote>Итак:
a)
(a[b])
сначала оценивается поa[1]
b), тогда
(b=0)
оценивается как0
c)
(a[1] = 0)
, оцененный последним