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

时间:2018-09-18 22:57:04

标签: java list indexing

让我们说代码是:

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]+ " ");
        }

为什么打印“ 1 1 1 3”而不是“ 2 1 1 3”?

谢谢。

1 个答案:

答案 0 :(得分:5)

当一条语句中出现多个分配时,这些分配具有右关联性。这意味着

data["observation"] = "Class 1" if (data["Result1"] > data["Result2"]) else "Class 2"

与以下含义相同:

a[0]=a[2]=a[1];

JLS Section 15.26 details

  

有12个赋值运算符;在语法上都是右相关的(它们从右到左分组)。因此,a[0]=(a[2]=a[1]); 的意思是a=b=c,它将a=(b=c)的值分配给c,然后将b的值分配给b。      

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

因此,一次分配的最终结果是所分配的值。这意味着:

  1. a的值已分配给a[1],即a[2]。这是表达式1的值。
  2. 步骤(1)中的值a[2]=a[1]被分配给1

如果要将a[0]中的值分配给a[2],然后再将值从a[0]复制到a[1],则必须将它们分成单独的语句。

a[2]