2013-05-03 18 views
3

可能有人可能解釋爲什麼以下:差異整數containsAll行爲和int數組(JAVA)

Integer[] arr1 = {1,2,3,4,5}; 
Collection<?> numbers = Arrays.asList(new Integer[]{1,2,3}); 
System.out.println(Arrays.asList(arr1).containsAll(numbers)); 

打印「真」,而如果我們爲INT交換整數像這樣:

int[] arr2 = {1,2,3,4,5}; 
Collection<?> numbers2 = Arrays.asList(new int[]{1,2,3}); 
System.out.println(Arrays.asList(arr2).containsAll(numbers2)); 

「false」是否被打印?

回答

9

在第二種情況下,每個列表由單個元素組成。這兩個元素都是int []數組。包含較大數組的列表不包含包含較小數組的列表的成員。

Arrays.asList()方法接受T類型參數的變量參數列表,並返回List<T>。對於整數數組,T可以是整數,而返回類型列表。但對於原始數組,T不能是一個整數,因爲不能有List<int>

+0

+1是唯一正確的答案。 – 2013-05-03 23:40:14

+1

我還想指出,即使在用{1,2,3,4,5}替換較小的數組{1,2,3}之後,仍然會在第二種情況下得到錯誤,而只有在兩個數組中的數組列表通過參考比較(即「==」)是相同的。 – 2013-05-04 23:09:07

0

列表是對象的集合,如果您在其中放入對象,它會很好用。當你試圖用原始數組創建一個列表時,JVM足夠友善,不會拋出一個異常,但它不能根據需要創建列表。因此當你用Integer數組創建一個列表時,這是有效的,並且當你用int數組創建一個列表時,它在語法上是正確的,但邏輯上違背了集合的原則,因此你會看到輸出的差異。