0

我正在尝试下面的代码。

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")));

我得到一个真值和一个空值。我期待一个 K2 而不是 null 。有人可以帮我解决这个问题。我已经覆盖了 hashcode 和 equals 方法。我错过了什么?

编辑: - 更改等于函数。结果相同。

4

1 回答 1

3

眼前的问题是hashCode需要一个大写字母C,你正在hashcode用小写字母实现c

((dog)o).name == name比较字符串的标识。这意味着如果您有两个 string 实例"GM",它们将.equals()相互连接,但不是==

于 2013-10-29T03:05:14.163 回答