假设代码是:
int[] a = {0,1,2,3};
a[0]=a[2]=a[1];
for(int i=0; i<a.length; i++) {
System.out.print(a[i]+ " ");
}
Run Code Online (Sandbox Code Playgroud)
为什么打印"1 1 1 3"而不是"2 1 1 3"?
提前致谢.
当在一个语句中发生多个赋值时,这些赋值具有右关联性.这意味着
a[0]=a[2]=a[1];
Run Code Online (Sandbox Code Playgroud)
具有与以下相同的含义:
a[0]=(a[2]=a[1]);
Run Code Online (Sandbox Code Playgroud)
有12个赋值运算符 ; 所有这些都是语法上的右关联(他们从右到左分组).因此,
a=b=cmeansa=(b=c),赋值cto 的值,b然后赋值btoa.在运行时,赋值表达式的结果是赋值发生后变量的值.
因此,一个赋值的最终结果是赋值.这意味着:
a[1]分配给的值a[2],即1.这是表达式的值a[2]=a[1].1被分配给a[0].如果你想从价值a[2]得到分配给a[0]从复制值之前a[1]到a[2],则必须将它们分开成独立的语句.
a[0]=a[2];
a[2]=a[1];
Run Code Online (Sandbox Code Playgroud)