提问者:小点点

明确肯定assertEquals()对于自定义类对象[closed]失败


< b >想改进这个问题?通过编辑此帖子添加详细信息并澄清问题。

尽管我有两个自定义类的数据对象与所有变量相等,assertEquals()方法还是失败了。我在这里缺少什么?


共2个答案

匿名用户

要比较两个对象,需要重写Object类的equals()方法。

当您创建一个类的两个对象时,例如classA,那么即使它们具有所有相同的变量,对象也是不同的。这是因为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,因为对象只有一个,并且两个 o1o2 引用都指向同一个对象。

您可以做的是覆盖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,它们是相等的。您可以对多个字段执行相同的操作。

匿名用户

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

public boolean equals(Object obj) { }