如何比较两个 Java 对象

2022-09-01 09:11:02

我有两个从同一类实例化的java对象。

MyClass myClass1 = new MyClass();
MyClass myClass2 = new MyClass();

如果我将它们两个属性设置为完全相同的值,然后验证它们是否相同

if(myClass1 == myClass2){
   // objects match
   ...

}

if(myClass1.equals(myClass2)){
   // objects match
   ...

}

但是,这两种方法都不返回真值。我已经检查了每个属性,并且它们匹配。

如何比较这两个对象以验证它们是否相同?


答案 1

您需要在 中提供自己的 实现。equals()MyClass

@Override
public boolean equals(Object other) {
    if (!(other instanceof MyClass)) {
        return false;
    }

    MyClass that = (MyClass) other;

    // Custom equality check here.
    return this.field1.equals(that.field1)
        && this.field2.equals(that.field2);
}

如果存在您的对象在哈希表中使用的可能性,则还应覆盖。一个合理的实现是将对象字段的哈希代码与类似的东西结合起来:hashCode()

@Override
public int hashCode() {
    int hashCode = 1;

    hashCode = hashCode * 37 + this.field1.hashCode();
    hashCode = hashCode * 37 + this.field2.hashCode();

    return hashCode;
}

有关实现哈希函数的更多详细信息,请参阅此问题


答案 2

您需要覆盖 和 。
将根据您需要的属性比较对象是否相等,并且是必需的,以便您的对象在 和 中正确使用equalshashCodeequalshashCodeCollectionsMaps