据我了解,以下代码应在两种情况下都打印$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);
});
};
,因为值有些未更改。
但是,当我运行以下代码时,它正在打印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()));
}
}
。
答案 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