1. 程式人生 > >基本資料型別陣列轉換列表顯的有些力不從心

基本資料型別陣列轉換列表顯的有些力不從心

基本資料型別陣列轉換列表是有缺陷的:開發過程中經常會使用Arrays 和 Collections這兩個工具類在陣列和列表之間轉換,非常方便,但是有時候也會出現一些奇怪的問題。


執行後的結果為 “1”;

仔細看了一下Arrays.asList的方法說明:輸入一個變長引數,返回一個固定長度的列表。注意這裡是一個變長引數,看原始碼:


asList方法輸入的是一個泛型變長引數,我們都知道基本型別是不能泛型化的,也就是說8個基本資料型別不能作為泛型引數,要想作為泛型引數就必須使用對應的包裝型別

那上邊int型別陣列的例子為什麼沒有編譯錯誤?         在java中,陣列是一個物件,它是可以泛型化的,也就是說我們的例子是把一個int型別的陣列作為了一個T的型別,所以轉換後在List中就只有一個型別為int陣列的元素了,我們打印出來看看,程式碼如下:  public static void main(String[] args) {   int[] data ={1,2,3,4,5};   List list=Arrays.asList(data);   System.out.println("元素型別:"+list.get(0).getClass());   System.out.println("前後是否相等:"+data.equals(list.get(0)));  } 列印結果: 元素型別:class [I
前後是否相等:true 為什麼“元素型別:class [I”? 我們並沒有指明是陣列Array型別呀!這是因為JVM不可能輸出Array型別,因為Array是屬於java.lang.reflect 包的,它是通過反射訪問陣列元素的工具類。在java中任何一個數組的型別都是“[I”,究其原因就是java並沒有定義陣列這一個型別,它是在編譯的時候生成的,是一個特殊的類,在JDK的幫助中也沒有任何陣列型別的資訊。 修改以上程式碼:  public static void main(String[] args) {   Integer[] data ={1,2,3,4,5};   List list=Arrays.asList(data);   System.out.println(list.size());  } 值得注意的是:原始型別陣列不能作為asList的輸入引數,否則會引起程式邏輯混亂。