我在一个类(Dog)中覆盖了 hashCode() 和 equals(),以便从 hashMap 中存储和检索它的实例,代码如下:
class Dog {
public Dog(String n) {
name = n;
}
public String name;
public boolean equals(Object o) {
if ((o instanceof Dog)
&& (((Dog) o).name == name)) {
return true;
} else {
return false;
}
}
public int hashCode() {
return name.length();
}
}
hashMap代码如下:
public class MapTest {
public static void main(String[] args) {
Map<Object, Object> m = new HashMap<Object, Object>();
m.put("k1", new Dog("aiko"));
Dog d1 = new Dog("clover");
m.put(d1, "Dog key"); // #1
System.out.println(m.get("k1"));
String k2 = "k2";
d1.name = "arthur"; // #2
System.out.println(m.get(d1)); #3
System.out.println(m.size());
}
}
问题是,在 2 时,我将存储在 hashMap 中的狗对象的名称更改为 1,3 处的预期输出为 NULL,但实际是 Dog Key!我希望它在 equals() 方法中像 clover!=arthur 一样失败,但它成功了!!我注意到,当 hashCode 成功(即 lengh==6)时,即使 equals() 方法失败,也会检索存储在地图中的值,我更改了 == 并改用了 equals() 但没有发生任何更改,问题仍然存在.