我有两个java.util.List
如下。
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
named的元素items
,如果它们包含在List
namedItemsExist
中,如下所示。
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
and 142
) 的删除并没有发生,因为这种情况if(item1==item2)
实际上应该是, (我可以理解andif(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
都是拆箱的主题,而其他示例似乎并非如此。如何?