【发布时间】:2012-10-18 11:37:36
【问题描述】:
可能重复:
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; 是虚拟的,它在这段代码中没有自己的价值,不应该再使用,但我只是想知道在这种情况下它实际上是如何工作的。
【问题讨论】:
-
我认为
array[i]在编译时被评估为array[4](可能是编译器做了一些优化)。
标签: java arrays variable-assignment