我正在尝试以下代码。
class dog{
private String name;
public dog(String n){
name = n;
}
public String getname(){ return name; }
public void setname(String n){ name =n;}
public boolean equals(Object o){
//if (( o instanceof dog )&& (((dog)o).name == name)) return true;
if (( o instanceof dog )&& (((dog)o).name.equals(name))) return true;
else return false;
}
public int hashcode(){
return name.length();
}
public String toString(){
return "Name:"+name;
}
}
这是我的狗课。现在在Main方法中,我正在尝试执行以下操作
Map<Object,Object> m = new HashMap <Object, Object>();
dog p = new dog("GM");
dog q = new dog ("GM");
System.out.println(p.equals(q));
m.put ( new dog("GM"),"K2");
System.out.println(m.get(new dog("GM")));
我得到一个true和null值。我期待K2而不是null。有人可以帮我这个。我重写了hashcode和equals方法。我错过了什么?
编辑: - 改变了等于功能。相同的结果。
答案 0 :(得分:3)
当前问题是hashCode
需要大写C
,您正在使用小写hashcode
实施c
。
((dog)o).name == name
比较字符串的标识。这意味着如果您有两个字符串"GM"
的实例,它们将.equals()
彼此相对,而不是==
。