在日常開發中我們經常把數組轉換成list類型,使用到的方法是java.util.Arrays.asList();
但是可能出現的一個問題是結果不是如我們所期盼的,比如以下代碼:
int[] array = { 1, 2, 3 };
List list = Arrays.asList(array);
System.out.println(list.size());
可能很多朋友都覺得這個list的size是等於array的數組長度,可是輸出結果並非是3,而是1;
並且輸出這個長度爲1的list的值,發現是一個對象。
我們查閱源碼:
public static <T> List<T> asList(T... a)
發現參數類型爲T,而T代表的是數組中元素的class。
我們知道對象都有class 屬性,這個屬性代表了類型本身。
而原生數據類型,比如int,long等,是沒有這個屬性的,具有class屬性的是其對應的包裝類Integer,Long。
這個時候int不存在class屬性,所以傳入的對象變成了數組本身而非數組中的元素。
解決方案(使用包裝類型的數組):
Integer[] array = { 1, 2, 3 };
List list = Arrays.asList(array);
System.out.println(list.size());
同時Java8提供了一個方法:
Integer[] array = { 1, 2, 3 };
List list = Arrays.stream(array).boxed().collect(Collectors.toList());
System.out.println(list.size());
具體代碼意義可以度娘java8新特性,這裏就不展開了。