2011-12-15 55 views
5

请考虑Java中的以下代码片段。我知道以下代码片段中的temp[index] = index = 0;陈述几乎是不可接受的,但在某些情况下它可能是必需的,因此需要知道。Java中的链接阵列分配

package arraypkg; 

final public class Main 
{ 
    public static void main(String... args) 
    { 
     int[]temp=new int[]{4,3,2,1}; 
     int index = 1; 

     temp[index] = index = 0; 
     System.out.println("temp[0] = "+temp[0]); 
     System.out.println("temp[1] = "+temp[1]); 
    } 
} 

它在控制台上显示以下输出。

temp[0] = 4 
temp[1] = 0 

我不明白这种说法temp[index] = index = 0;temp[1]如何包含0?这项任务如何发生?

+0

你认为`temp [1]`是什么? – 2011-12-15 19:08:58

+0

我想这很清楚,他期望'index'首先变成'0',使'temp [index]等于'temp [0]`,这样只有第一个元素被修改。 – 2011-12-15 19:12:16

回答

8

分配完成(temp[index] = (index = 0)),右联合。

但首先表达式temp[index]针对LHS变量进行评估。那时index仍然是1.然后RHS(index = 0)完成。

1

您的陈述将零分配给它。语句temp [index] = index = 0将0写入索引AND到temp [index]中。这就是这个意思。使所有变量位于赋值运算符0的左边。

1

该行的作用是在index被赋予值0之后temp[index]应该等于index

这就是为什么这种语法大多不可接受的原因。这很难阅读,大多数人不理解它。

1

您将temp [1]和index分配给'0' 它从左到右运行。 think ass temp [index/* * /]