HashMap的Values()返回错误的输出

时间:2017-07-20 09:40:25

标签: java

据我了解,以下代码应在两种情况下都打印$scope.highlightButtonThenAddValue = function (value, event) { log.debug("button pressed on screen, button value: " + value); highlightButtonTouch(event, 'btn-numeric-active').then(function() { $scope.add_value(value); }); }; ,因为值有些未更改。

但是,当我运行以下代码时,它正在打印truetrue

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())); } }

2 个答案:

答案 0 :(得分:2)

 System.out.println(map1.equals(map2)); // prints true as expected

这是因为HashMap's equals() method overiden这样可以检查键和值。

 System.out.println(map1.values().equals(map2.values()));// false

当您执行.values()时,您获得的Collection对象并不是等于默认行为。

答案 1 :(得分:1)

HashMap.values()会返回Collection的实现,但不会覆盖Object的{​​{1}},因此比较会返回equals,因为默认实现会比较引用。

false