2014-07-18 32 views
-1
int arr[] = new int[2]; 
Object obj = arr; 

上面的代碼是有效的陣列,但寫引用的整數變量Object類

Object obj[] = new Object[2]; 
int arr = obj; 

是給編譯時間錯誤。爲什麼?我對Java完全陌生;有人可以解釋嗎?

回答

1

第一個是有效的,因爲在Java中:數組是一個對象。

Arrays (The Java Tutorials)

數組是保存單個類型的值的固定數量的容器對象。

但是,第二個,Object數組不是int,這就是它失敗的原因。

0

Java中的數組是對象,所以第一個片段是有效的。另一方面,對象數組肯定不是int,所以第二個片段失敗。問問自己:如果該代碼段被編譯,你會期望arr有效嗎?

JLS §10

在Java編程語言中,數組是對象(§4.3.1),被動態創建,並且可以被分配給類型Object§4.3.2)的變量。

(重點煤礦)

0

全部Arrays都是Objects。但所有Objects不是arrays/ints

int arr[]=new int[2]; 
Object obj=arr;// valid . an int array is also an Object 

Object obj[]=new Object[2]; 
     int arr=obj; // an int is not an Object array 
0

在第一種情況下,您創建的數組繼承自Object,因此它按預期工作。

在第二種情況下,Java中的整數是原始類型,您嘗試分配一個對象。原始類型不是一個對象,所以它永遠不會工作。