想請問這個method: Arrays.asList() 參數值可以是一個數組,如果是對象數組,處理時沒有問題;但是在處理基本類型數組卻出現問題。對比結果簡化描述如下:
Integer[] moreInts = {6, 7, 8, 9, 10};
int[] arr = {11, 12, 13, 14, 15};
System.out.println(Arrays.asList(moreInts)); -->可以返回數組
System.out.println(Arrays.asList(arr));--> 系統給出的值卻是[[I@7f31245a]
我的問題在於:
1)Arrays.asList()返回的類型應該是List, 為什麼系統給的值卻是[I (代表是int 數組)
2)為什麼不能像處理對象數組一樣,返回這個數組?
多謝回答!
多謝回答
Arrays.asList(T... a)是asList方法的簽名,這裡T是范型,也就是T extends Object,在java裡,primitive type和object並沒有繼承關系,而primitive數組是object的子類,你可以測試一下System.out.println(new int[10] instanceof Object);這會輸出true。
所以在第一個調用。傳入的參數被編譯器解釋成了Integer[]類型,而第二個調用被解釋成了int[][].
至於為什麼不能把primitive數組當成對象數組那樣處理,主要是因為向前兼容,在Java設計之初,primitive type就沒有當作object類型而是單獨處理的(原因是對象類型需要align,得另外占用空間). oracle現在希望能消除這個界限,在JDK 10我們也許可能看到primitive type和object的統一。