簡體   English   中英

Java中的地圖和自定義對象

[英]Maps and custom objects in java

我正在嘗試下面的代碼。

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。 有人可以幫我這個忙嗎? 我重寫了哈希碼和equals方法。 我想念的是什么?

編輯:-更改等於功能。 結果相同。

迫在眉睫的問題是hashCode需要大寫的C ,而您正在使用小寫的c實現hashcode

((dog)o).name == name比較字符串的身份。 這意味着,如果您有字符串"GM"兩個實例,則它們將.equals() ,但不會==

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM