Java Equals方法不起作用
我有两个对象的“列表”,如果元素相等,我想比较它们。如果它们不相等,循环应将不相等对象放入另一个列表中。很简单。我的问题是:equals方法没有按预期工作 下面是使用自定义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
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);
}