我有兩個java.util.List
如下。比較Java中的包裝類型
List<Long> items = new ArrayList<Long>(){{
add(141L);
add(142L);
}};
List<Long> itemsExist = new ArrayList<Long>(){{
add(123L);
add(124L);
add(125L);
add(126L);
add(127L);
add(141L);
add(142L);
}};
我試圖刪除的List
命名items
的元素,如果它們被包含在名爲ItemsExist
如下List
。
Iterator<Long> itemsIterator = items.iterator();
while(itemsIterator.hasNext())
{
Long item1=itemsIterator.next();
Iterator<Long> itemsExistIterator = itemsExist.iterator();
while(itemsExistIterator.hasNext())
{
Long item2=itemsExistIterator.next();
if(item1==item2)
{
itemsIterator.remove();
}
}
}
但切除元素(141
和142
)的沒有發生,因爲這種情況下if(item1==item2)
這實際上應該是if(item1.equals(item2))
,(我可以理解==
和equals()
之間的差異)。
這可以通過一個非常簡單的例子仿效如下。
Long a=new Long(5);
Long b=new Long(5);
System.out.println((a==b)+" : "+a.equals(b));
這分別返回false
和true
。
以下示例返回在兩個比較true
。
Long a=5L;
Long b=5L;
System.out.println((a==b)+" : "+a.equals(b));
在這種情況下,既a
和b
也似乎是不似乎是與其它實施例的情況下取消裝箱的主題。怎麼樣?
令人傷心的反直覺,整數也是如此。 –