错误覆盖“等于”?

时间:2019-02-04 14:35:08

标签: java equals

被卡在测试象牙上

 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方法的正确性存在一些问题。任何帮助都是有用的。

1 个答案:

答案 0 :(得分:1)

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