2014-10-16 140 views
0
<[]> vs <null> 

第一個是不包含對象的空集。它可以從代碼創建:<[]>與<null>之間的區別是什麼

Set<Node> expected =new HashSet<>(); 

第二個可能是包含1個空元素的集合。如果不是,可以爲null真的有一個類型Set

不知道如何編碼第二個項目。

+1

'null'是**不是**對象。這是一個指向無處的引用,可以有任何對象的**引用**類型。它佔用堆棧上的內存插槽,但堆中沒有任何內容。 – 2014-10-16 23:27:13

回答

2

< []>表示一個對象不包含任何元素。 null不是一個元素。 在u調用結構方法如new HashSet<>();後,設置指向一個真實的內存。但零點無處。

1

包含null的集合包含元素null。一個空集不包含元素null

假設將包含null這樣一組:

Set<Object> setWithNull = new HashSet<Object>(); 
setWithNull.add(null); 

和空集是這樣的:

Set<Object> emptySet = new HashSet<Object>(); 

然後,你可以看到以下差異:

setWithNull.size()==1     emptySet.size()==0 
setWithNull.isEmpty()==false   emptySet.isEmpty()==true 
setWithNull.contains(null)==true  emptySet.contains(null)==false 

setWithNull.equals(emptySet)==false 

所以包含null的集合與空集不同在許多重要方面。

+0

即使沒有方括號'<[null]>'vs'',該集合是否實際上包含空值? – user83039 2014-10-17 00:19:29

+0

@ user83039我不知道你在想什麼,你用這些方括號有意義。你可以創建一個集合並在其中輸入'null'而不用輸入方括號。 – khelwood 2014-10-17 06:38:01

+0

這些是JUnit中的值。 – user83039 2014-10-17 16:55:14

相關問題