Java Equals方法不起作用

Java Equals方法不起作用,java,list,loops,combobox,equals,Java,List,Loops,Combobox,Equals,我有两个对象的“列表”,如果元素相等,我想比较它们。如果它们不相等,循环应将不相等对象放入另一个列表中。很简单。我的问题是:equals方法没有按预期工作 下面是使用自定义equals方法的对象类: public class Profil { private String vorname; private String name; private String adLoginBenutzer; public Profil() { } public String getAdLog

我有两个对象的“列表”,如果元素相等,我想比较它们。如果它们不相等,循环应将不相等对象放入另一个列表中。很简单。我的问题是: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{
私有字符串名称;
私有字符串名称;
私有字符串adloginbuntzer;
公共档案{
}
公共字符串getAdLoginBenutzer(){
返回adloginbuntzer;
}
public void setAdLoginByNutzer(字符串AdLoginByNutzer){
this.adLoginBenutzer=adLoginBenutzer;
}
公共字符串getVorname(){
返回名称;
}
公共void setVorname(字符串vorname){
this.vorname=vorname;
}
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
@凌驾
公共字符串toString(){
if(name==null | | vorname==null){
返回“”;
}
返回vorname+”,“+name+”+adloginbutzer;
}
@凌驾
公共布尔等于(对象obj){
如果(getClass()!=obj.getClass()){
返回false;
}
Profil其他=(Profil)obj;
如果(!this.getVorname().equals(other.getVorname())| |!this.getName().equals(other.getName())| |!this.getAdLoginBuntzer().equals(other.getAdLoginBuntzer()))
{
返回false;
}
返回true;
}
}

下面是循环:(注意:我基本上希望将列表合并到comboboxmodel中,如果profil对象不等于它应该将其添加到ComboxModel中的第一个位置)

public void putProfilesIntoCbx(哈希集配置文件)
{
DefaultComboxModel cbx=(DefaultComboxModel)cbBearbeiter.getModel();
用于(profile p:profile)
{
对于(int i=0;i

我调试了代码,并在equals方法的最后一个if处设置了断点。尽管存在相等的对象,但最后一个if毫无理由地返回false,即使对象确实相等。即使我将equals if语句倒置,它也不起作用。

正如大家所说的那样,
equals()
方法和
hashcode()
方法之间存在关系


如果您
@覆盖
equals()
方法,则需要
@覆盖
hashcode()
方法

要使哈希集正常工作,您还需要覆盖
hashcode()
,以便对象“相等”时哈希值相同。如果覆盖equals(),则应覆盖hashcode()我也不知道hashCode()的方法。我应该在哪里实现这个方法,这个方法应该做什么?阅读
对象的javadoc
;如果您使用java 7,请查看
Objects#hash(Object…Objects)
以实现
hashcode()
()谢谢,netbeans本身给了我这样做的提示。我完全忽略了它,没有任何理由xD。非常感谢。
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);
}