簡體   English   中英

整數和int數組的包含所有行為的差異(Java)

[英]Difference in containsAll behavior for Integer and int arrays (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));

打印“true”,而如果我們像這樣交換Integer:

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

打印“假”?

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

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

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

根據這個: Java和C#中的int和Integer有什么區別?

Integer是一個Object,int是原始的,它們不是直接相同的......

因此,在Java文檔中,Collection.containsAll(Object o)需要一個Object而不是一個原語。 也許這解釋了不同

http://docs.oracle.com/javase/6/docs/api/java/util/Collection.html#contains(java.lang.Object)

在感謝你的問題之前,我自己都不知道。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM