尽管我有两个自定义类的数据对象,它们与所有变量相同,但assertEquals()方法失败了。我在这里缺少什么?
答案 0 :(得分:3)
要比较两个对象,您需要覆盖equals()
类的Object
方法。
当你创建一个类的两个对象时,比如类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
引用都指向同一个对象。
您可以做的是覆盖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,则它们是相等的。您可以为多个字段执行相同操作。
答案 1 :(得分:0)
比较以检查在equals()函数的帮助下是否发生了等于。您需要在自定义类中重写此方法。
public boolean equals(Object obj) { }

还请确保您也覆盖hashCode()方法。