Java 等于方法不起作用

标签 java list loops combobox equals

我有两个对象“列表”,我想比较它们是否相等。如果它们不相等,循环应该将不相等的对象放入另一个列表中。很简单。我的问题是: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;
}

这是循环:(注意:我基本上想将列表合并到一个组合框模型中,如果配置文件对象不等于它应该将它添加到组合框模型的第一个位置)

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。即使我反转 equals if 语句,它也不起作用。

最佳答案

正如大家所说,equals() 方法和hashcode() 方法之间有关系。

如果你@Override equals() 方法,你需要@Override hashcode()方法也是如此

关于Java 等于方法不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24016100/

相关文章:

java - Spring Mongo DB @DBREF

java - 将 int 数组转换为 String 数组

python - 在两个不同列表中查找相同索引号以比较值的最有效方法

php - AJAX 请求 PHP 脚本循环

javascript - 获取对象的值

java - Android从另一个包中以编程方式查找应用程序的CPU使用情况

java - 如何删除 intellij idea 输出中的 select <DEBUG log> ?

java - 我的 Java 程序没有改变变量的值

c# - 遍历不断修改的列表

java - 使用 else 语句创建列表