【发布时间】:2016-03-17 18:56:28
【问题描述】:
我实现了overriding equals and hashCode correctly。在下面的代码中,当我打印出 map 和 num1 时,我可以在控制台中看到它们都有更新的 hashCode()。但是当我试图把它从地图中取出时,它说它是空的。有人可以帮助解释为什么 .get() 方法找不到它吗?
class Phone {
int number;
Phone(int number) {this.number = number;}
public int hashCode() {
return number;
}
public boolean equals(Object o) {
if (o != null && o instanceof Phone)
return (number == ((Phone)o).number);
else
return false;
}
public static void main(String args[]) {
Map<Phone, String> map = new HashMap<>();
Phone num1 = new Phone(2500);
map.put(num1, "John");
num1.number = 100;
System.out.println(map);
System.out.println(num1);
System.out.println(map.get(num1)); // why does it print null
}
}
【问题讨论】:
-
通知
num1.number = 100; -
开发人员:这不是一个坏问题,很可能是一个很常见的错误。你应该支持这个问题,因为它可能对其他人有帮助。
-
@pczeus 它可能被否决了,因为这是一个常见问题,并且网站上已经有多个已回答的问题(我上面链接的问题可能在输入此问题的标题时已经提出)。