在Java中为链中的变量赋值

时间:2012-10-29 06:27:23

标签: java arrays variable-assignment

  

可能重复:
  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);

然后,所有三个变量xyz的值变为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;是虚拟的,它在这段代码中没有自己的值,不应再使用了,但我只是想知道在这种情况下实际上是如何工作的。

4 个答案:

答案 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]