Java 不正确地覆盖了;等于;?

Java 不正确地覆盖了;等于;?,java,equals,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 = n

卡在测试牙上:

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

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

更让我困惑的是,SOUT m1.equals(m3)显示“true”。1。您没有覆盖hashCode。2.您将
Integer
s与==进行比较,而不是与equals进行比较。是的,我认为发生的是哈希代码。这些散列中的每一个都被转换为不同的值,因此它们各自被单独存储。因此,对于4个对象,大小是4。此外,如果OP不知道建议的重复链接中的陷阱,那么可以获得Joushua Bloch提供的有效Java的副本。那本书中有很多有用的建议。无关:在
equals
中,检查
o
是否为空,以及它是否是
MyKey
的一个实例,没有回答问题(问题是什么?;)原始答案:
您必须使用“.equals()”而不是“==”
来比较对象的键。好的,对不起,我无意通过编辑答案来混淆任何人。我的意思是抱怨这个不具体的问题。