困惑如何将索引处的值分配给索引处的另一个值到列表中索引处的另一个值

0 java indexing list

假设代码是:

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"?

提前致谢.

rge*_*man 5

当在一个语句中发生多个赋值时,这些赋值具有右关联性.这意味着

a[0]=a[2]=a[1];
Run Code Online (Sandbox Code Playgroud)

具有与以下相同的含义:

a[0]=(a[2]=a[1]);
Run Code Online (Sandbox Code Playgroud)

JLS第15.26节详情:

有12个赋值运算符 ; 所有这些都是语法上的右关联(他们从右到左分组).因此,a=b=cmeans a=(b=c),赋值cto 的值,b然后赋值bto a.

在运行时,赋值表达式的结果是赋值发生后变量的值.

因此,一个赋值的最终结果是赋值.这意味着:

  1. a[1]分配给的值a[2],即1.这是表达式的值a[2]=a[1].
  2. 步骤(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)