不正确重写“equals”?

jk9hmnmh  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(333)

这个问题在这里已经有答案了

重写equals()方法时为什么要重写hashcode()(5个答案)
一年前关门了。
卡在测试牙上:

class MyKeys {
 Integer key;
 MyKeys(Integer k) {
 key = k;
 }
 public boolean equals(Object o) {
 return ((MyKeys) o).key == this.key;
 }
}

以下代码片段:

Map m = new HashMap();
MyKeys m1 = new MyKeys(1);
MyKeys m2 = new MyKeys(2);
MyKeys m3 = new MyKeys(1);
MyKeys m4 = new MyKeys(new Integer(2));
m.put(m1, "car");
m.put(m2, "boat");
m.put(m3, "plane");
m.put(m4, "bus");
System.out.print(m.size());

所以,我的预期输出是“2”,而实际上是4。我想重写equals方法的正确性有问题。任何帮助都是有用的。

2mbi3lxu

2mbi3lxu1#

必须使用“.equals()”而不是“==”,来比较对象的键。您还需要根据需要实现hashcode()。

相关问题