让我们说代码是:
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”?
谢谢。
答案 0 :(得分:5)
当一条语句中出现多个分配时,这些分配具有右关联性。这意味着
data["observation"] = "Class 1" if (data["Result1"] > data["Result2"]) else "Class 2"
与以下含义相同:
a[0]=a[2]=a[1];
有12个赋值运算符;在语法上都是右相关的(它们从右到左分组)。因此,
a[0]=(a[2]=a[1]);
的意思是a=b=c
,它将a=(b=c)
的值分配给c
,然后将b
的值分配给b
。>在运行时,赋值表达式的结果是赋值发生后变量的值。
因此,一次分配的最终结果是所分配的值。这意味着:
a
的值已分配给a[1]
,即a[2]
。这是表达式1
的值。a[2]=a[1]
被分配给1
。如果要将a[0]
中的值分配给a[2]
,然后再将值从a[0]
复制到a[1]
,则必须将它们分成单独的语句。
a[2]