【发布时间】:2017-07-20 09:40:25
【问题描述】:
据我了解,以下代码在两种情况下都应打印true,因为有些值没有改变。
但是,当我运行以下代码时,它正在打印 true 和 false:
public class Test {
public static void main(String[] args) {
HashMap<String, Boolean> map1 = new HashMap<String, Boolean>();
HashMap<String, Boolean> map2 = new HashMap<String, Boolean>();
map1.put("true", Boolean.TRUE);
map1.put("false", Boolean.FALSE);
map2.put("true", Boolean.TRUE);
map2.put("false", Boolean.FALSE);
System.out.println(map1.equals(map2)); // prints true as expected
// prints false even though the values are indeed equal:
System.out.println(map1.values().equals(map2.values()));
}
}
谁能帮我理解为什么它在第二种情况下打印false。
【问题讨论】:
-
map.values()返回一个Collection。你对它的实现一无所知。因此,你不能仅仅因为里面的元素相等就期望它返回 true。 -
原因是返回的
values没有实现equals()。无论使用什么版本的 equals 都不认为你的两个地图的值集合是相等的。
标签: java