可能重复:
Java - Order of Operations - Using Two Assignment Operators in a Single Line
如果我们在链中为变量赋值,如下所示,
int x=10, y=15;
int z=x=y;
System.out.println(x+" : "+y+" : "+z);
然后,所有三个变量x
,y
和z
的值变为15
。
但我不了解阵列的以下现象。
int array[]={10, 20, 30, 40, 50};
int i = 4;
array[i] = i = 0;
System.out.println(array[0]+" : "+array[1]+" : "+array[2]+" : "+array[3]+" : "+array[4]);
输出10 : 20 : 30 : 40 : 0
。它将array[4]
的最后一个元素的值替换为0
。
关于以前的赋值语句 - int z=x=y;
,我希望第一个元素的值意味着array[0]
替换为0
。为什么不是这样?这很简单,但我无法弄清楚。你能解释一下吗?
顺便说一句,这个赋值语句array[i] = i = 0;
是虚拟的,它在这段代码中没有自己的值,不应再使用了,但我只是想知道在这种情况下实际上是如何工作的。
答案 0 :(得分:7)
int i = 4;
当我等于4时,array[i]
等于array[4]
,因此array[i] = i = 0;
等同于array[4] = i = 0;
。这就是它将索引4的值改为0。
答案 1 :(得分:4)
分隔符[]和()更改优先级。在Java看不到它们之前,将计算这些分隔符中的所有内容。
array[i] = i = 0;
在编译阶段,对此行的第一次更改将如下所示:
array[4] = i = 0; // subscript separator is evaluated first.
现在,赋值操作是右关联的,因此,i
被赋值0
,然后数组[4]被赋值为i
,即0
。< / p>
检查以下链接:
答案 2 :(得分:3)
让我打破它....
您的陈述:
int array[]={10, 20, 30, 40, 50};
<强>实施强>
array[0] => 10
array[1] => 20
array[2] => 30
array[3] => 40
array[4] => 50
您的陈述:
int i = 4;
<强>实施强>
i => 4
您的陈述:
array[i] = i = 0;
<强>实施强>
array[4] = i = 0;
array[4] = 0
如果你想要array[0] => 0
,那么就这样做......
int i = 0;
array[i] = i = 0
答案 3 :(得分:2)
因为在赋值操作之前评估了array[i]