簡體   English   中英

Java Equals方法不起作用

[英]Java Equals Method doesnt work

我有兩個對象的“列表”,我想比較元素是否相等。 如果它們不相等,則循環應該采用不相等的對象並將其放入另一個列表中。 很簡單。 我的問題是:equals方法不能按預期工作。

這是使用我的自定義equals方法的對象類:

    public class Profil {

private String vorname;
private String name;
private String adLoginBenutzer;


public Profil() {
}


public String getAdLoginBenutzer() {
    return adLoginBenutzer;
}


public void setAdLoginBenutzer(String adLoginBenutzer) {
    this.adLoginBenutzer = adLoginBenutzer;
}


public String getVorname() {
    return vorname;
}


public void setVorname(String vorname) {
    this.vorname = vorname;
}


public String getName() {
    return name;
}


public void setName(String name) {
    this.name = name;
}

@Override
public String toString() {
    if (name == null || vorname == null) {
        return "<keiner>";
    }
    return vorname + ", " + name + " " + adLoginBenutzer;
}

@Override
public boolean equals(Object obj) {
    if (getClass() != obj.getClass()) {
        return false;
    }
    Profil other = (Profil)obj;

    if(!this.getVorname().equals(other.getVorname()) || !this.getName().equals(other.getName()) || !this.getAdLoginBenutzer().equals(other.getAdLoginBenutzer()))
    {
        return false;
    }



    return true;
}

}

這是循環:(注意:我基本上想要將列表合並到一個組合模型中,如果profil-object不等於它應該將它添加到comboboxmodel中的第一個位置)

public void putProfilesIntoCbx(HashSet<Profil> profile)
{
    DefaultComboBoxModel<Profil> cbx = (DefaultComboBoxModel <Profil>)cbBearbeiter.getModel();
    for(Profil p : profile)
    {
       for(int i = 0; i< cbx.getSize(); i++)
       {
           if(!p.equals(cbx.getElementAt(i)))
           {
               cbx.insertElementAt(p, 0);
           }
       }
    }
    cbBearbeiter.setModel(cbx);
}

我調試了代碼並在equals方法的最后一個if處獲取了斷點。 雖然有相同的對象,但是即使對象真的相等,最后的if也會毫無理由地返回false。 即使我反轉等於if語句它也不起作用。

正如大家所說, equals()方法和hashcode()方法之間存在關系。

如果@Override使用equals()方法,則還需要@Override hashcode()方法

暫無
暫無

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

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