1. 程式人生 > 實用技巧 >Arrays.asList(new int[]{1,2,3})和Arrays.asList(new Integer[]{1,2,3})

Arrays.asList(new int[]{1,2,3})和Arrays.asList(new Integer[]{1,2,3})

Arrays.asList(new int[]{1,2,3});
Arrays.asList(new Integer[]{1,2,3});

這兩行程式碼的返回值是不一樣的。

看原始碼的話,該方法是是這樣的

public static <T> List<T> asList(T... a) {
        return new ArrayList<>(a);
}

既然是一個可變長度,那麼傳入int[]和Integer[]進去,肯定是將陣列平鋪。

那麼int[]和Integer[]的中的元素型別是怎麼樣?一個是int,一個是Integer?

但是好像沒有int這個類吧?雖然有著int.class的程式碼寫法倒是了。

結果是這樣的

     int[] a = new int[] {1,2,3,4,5,6,7,8};
        Integer[] b = new Integer[] {1,2,3,4,5,6,7,8};
        List<int[]> ints1 = Arrays.asList(a);
        List<Integer> list = Arrays.asList(b);

需要注意asList返回的不是java.util包下的ArrayList,而是Arrays類中的靜態內部類。所以沒有重寫remove之類的方法,呼叫其父類的方法。

public
E remove(int index) { throw new UnsupportedOperationException(); }

丟擲不支援運算異常