Java 对于自定义类对象,Assert.assertEquals()失败

Java 对于自定义类对象,Assert.assertEquals()失败,java,junit,Java,Junit,即使我有两个自定义类的数据对象,它们在所有变量中都相等,assertEquals()方法还是失败了。这里我遗漏了什么?在equals()函数的帮助下,进行比较以检查其是否等于。您需要在自定义类中重写此方法 public boolean equals(Object obj){}要比较两个对象,需要重写Object类的equals()方法 当您创建一个类的两个对象时,比如classa,那么这些对象是不同的,即使它们具有相同的变量。这是因为equals方法或=都检查对象的引用是否指向同一对象 Obj

即使我有两个自定义类的数据对象,它们在所有变量中都相等,assertEquals()方法还是失败了。这里我遗漏了什么?

在equals()函数的帮助下,进行比较以检查其是否等于。您需要在自定义类中重写此方法


public boolean equals(Object obj){}
要比较两个对象,需要重写
Object
类的
equals()
方法

当您创建一个类的两个对象时,比如class
a
,那么这些对象是不同的,即使它们具有相同的变量。这是因为equals方法或
=
都检查对象的引用是否指向同一对象

Object o1 = new A();
Object o2 = new A();
o1.equals(o2);
在这里,equals方法将返回false,即使所有字段都是
null
,或者即使您将相同的值分配给这两个对象

Object o1 = new A();
Object o2 = o1;
o1.equals(o2);
在这里,equals方法将返回true,因为对象只有一个,
o1
o2
引用都指向同一个对象

Object o1 = new A();
Object o2 = new A();
o1.equals(o2);
您可以做的是重写
equals
方法

public class A {
    @Override
    public boolean equals(Object obj) {
        if (obj==this) return true;
        if (obj==null || obj.getClass()!=this.getClass()) return false;
        return (this.id==((A) obj).id);
    }
    // You must also override hashCode() method
}

这里我们说,如果类
A
的对象具有相同的id,那么它们是相等的。您可以对多个字段执行相同的操作。

如果您不显示您所拥有的,我们看不到您遗漏了什么。如果您在同一分钟内发布了自我回答,为什么要问问题?我发现了问题所在。我找到了解决办法。我想到了分享。如果有那么多的负面影响,我很抱歉。我想我应该自己留着它。@JavaKumara不要把这个评论误解为仇恨,它不是关于你的,而是关于问题的,Stackoverflow不是一个论坛,它是一个问答网站。该网站有避免重复问题、不明确问题、对问题的最低理解等指导方针。。。所有这些都是为了创建一个内容丰富的网站。关于这个话题,过去已经有很多问题得到了回答。顺便说一句:谢谢@Brice。我不知道这些指导方针。会通过的。你很清楚你的问题quickly@ToYonos因为他只是要求自己回答。如果问题的质量更高,这就可以了。取出
implements Comparator
。他还应该覆盖
hashCode
方法。另外,“
?true:false
”是多余的。为什么不将
id
s与
=
进行比较呢?进行了更改,感谢您的指点,但不应该说
实现了可比较的
。另外,如果您的
equals
方法得到的不是
a
的实例,它将抛出一个
ClassCastException