< b >想改进这个问题?通过编辑此帖子添加详细信息并澄清问题。
尽管我有两个自定义类的数据对象与所有变量相等,assertEquals()方法还是失败了。我在这里缺少什么?
要比较两个对象,需要重写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,因为对象只有一个,并且两个 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,它们是相等的。您可以对多个字段执行相同的操作。
通过equals()函数进行比较以检查其是否等于。您需要在自定义类中重写此方法。
public boolean equals(Object obj) { }