【发布时间】:2015-01-13 14:08:07
【问题描述】:
考虑以下场景:
Object o1 = new Object();
Object o2 = new Object();
HashMap<Object, Object> map = new HashMap<Object, Object>();
map.put(o1, o2);
boolean test1 = map.get(o1) == o2; // This evaluates to true
// Now lets say we alter the state of o1:
o1.setSomeInternalState(Object newState);
boolean test2 = map.get(o1) == o2; // This evaluates to false, because now map.get(o1) returns null
假设 o1 的类已覆盖 equals() 和 hashCode()。
我在调试过程中遇到了这个问题,因为我在某些业务逻辑中使用的一个特定对象上明确覆盖了equals 和hashCode。我可以完全理解为什么当我改变它的状态时对象的哈希码会改变,但是为什么 map.get(o1) 会因为它返回 null 呢?只有一个对象,所以key的hashcode不应该匹配吗?
【问题讨论】:
-
这些链接可以帮助你理解java中的hashcode和equals stackoverflow.com/questions/27581/…, stackoverflow.com/questions/2265503/…,你会得到想要的解决方案
标签: java hashmap equals hashcode