仕様によると:
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プログラミング言語は、演算子のオペランドが特定の評価順序、つまり左から右に評価されているように見えることを保証します。
コードがこの仕様に大きく依存しないようにすることをお勧めします。通常、各式に最も外側の操作として最大で1つの副作用が含まれている場合、および式の左から右への評価の結果として発生する例外にコードが正確に依存しない場合、コードはより明確になります。
ここで非常に有益な2番目の段落をコピーしました-そのような紛らわしいコードを書くことはめったに意味がありません。
これもチェックする価値があると思います。