UnmodifiableCollection

UnmodifiableCollection

为什么以下测试在Java中失败?

@Test
public void testUnmodifiableCollection() {
    Collection<String> strList = new ArrayList<String>();
    strList.add("foo1");
    strList.add("foo2");
    Collection<String> col1 = Collections.unmodifiableCollection(strList);
    Collection<String> col2 = Collections.unmodifiableCollection(strList);
    Assert.assertTrue(col1.equals(col2));
}

最佳答案

因为对Collections.unmodifiableCollection(Collection)的调用返回了UnmodifiableCollection,所以它不实现自己的equals方法,而仅实现Collection接口(interface)。因此,使用Object.equals(Object)可以将对象引用彼此进行比较。由于您正在比较两个不同的引用,因此结果为false。

Javadoc还记录了equals(和hashCode)没有传递给基础集合的事实:



请参阅this answer以获得很好的解释,为什么还有其他任何违反ListSet的协定。

10-04 10:30