Согласно спецификации:
15.26 Операторы присваивания Есть 12 операторов присваивания;все синтаксически справа ассоциативны (они группируются справа налево).Таким образом, a = b = c означает a = (b = c), который присваивает значение c b и затем присваивает значение b a.
Итак, a[i] = i = 9;
являетсятак же, как i = 9; a[i] = i;
Редактировать
На самом деле это не так.Пример тестового класса:
import java.util.Arrays;
public class Mkt {
public static void main(String[] args) {
int[] a = new int[10];
int i = 5;
a[i] = i = 9;
System.out.println(Arrays.toString(a));
}
}
Пример прогона:
$ javac Mkt.java && java Mkt
[0, 0, 0, 0, 0, 9, 0, 0, 0, 0]
Пожалуйста, обратитесь к другой ответ для получения дополнительной информации.В основном:
a[i] = i = 9
совпадает с a[i] = (i = 9)
, так как =
является ассоциативным справа Однако, операнд оценка равнаслева направо, согласно это :
15,7.Порядок оценки
Язык программирования Java гарантирует, что операнды операторов, по-видимому, будут оцениваться в определенном порядке оценки, а именно слева направо.
Рекомендуется, чтобы код не полагался критически наэта спецификация.Код обычно более понятен, если каждое выражение содержит не более одного побочного эффекта в качестве самой внешней операции, и когда код не зависит от того, какое именно исключение возникает в результате вычисления выражений слева направо.
Я скопировал второй абзац, который очень поучителен здесь - редко имеет смысл писать такой запутанный код.
Я также считаю этим достойным внимания.