2011-12-27 17 views
4

請考慮Java中的以下表達式。Java中的數組表達式

int[] x={1, 2, 3, 4}; 
int[] y={5, 6, 7, 0}; 

x=y; 
System.out.println(x[0]); 

會在控制檯上顯示5因爲x由通過表達x=yx[0]顯然被評估以5這實際上是y[0]的值以指向y

當我用下面的語句二者合併成一個單一的語句替換上面的兩個語句,

System.out.println(x[(x=y)[3]]); 

它顯示1這是x[0]即使它似乎是等同於上述那些價值兩個陳述。怎麼樣?

+0

你不應該使用這樣的表述。他們只是混淆,容易出錯而且很難調試。 – 2011-12-27 15:15:47

+1

它們仍然存在,我們必須知道與Java或任何語言的這些東西相關的一切。 – Lion 2011-12-27 15:22:24

回答

6

數組y指向的第三個索引是0,所以1是正確的輸出。

所以,你必須

x[(x=y)[3]]

這是x[y[3]],但y[3]是0,因爲陣列0指數的,而x[0]爲1

2

這是因爲x = y產生內部的新的x指數。所以現在x[3] = y[3] = 0x[0] = 1,因爲它仍然在外面使用舊的x陣列。

1

Java編程語言保證操作符的操作數看起來是按照特定的評估順序(即從左到右)進行評估的。

...println(x[y[3]]); // 1 
1
x[(x=y)[3]] 

分解爲

int[] z = y; // new "temp" array (x=y) in your expression above 
int i = z[3]; // index 3 in y is 0 
System.out.println(x[i]); // prints x[0] based on the value of i...which is 1