java - 如何比较两个java对象

标签 java object compare

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

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

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

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

}

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

}

但是,这些方法都没有返回真实值。我检查了每个属性,它们匹配。

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

最佳答案

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

@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()。一个 reasonable implementation将对象字段的哈希码与以下内容结合起来:

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

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

    return hashCode;
}

this question有关实现哈希函数的更多详细信息。

关于java - 如何比较两个java对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16069106/

相关文章:

javascript - 合并两个对象而不覆盖

javascript - 检查 2 个数组是否包含 javascript 中相同值的最快方法

java - 比较字符串时出现问题

c# - 比较两个大型 CSV 文件以删除相同的行/记录

java - 刷新存储库

java - 集成 Vaadin 7 和 EJB 的最佳方式或如何制作服务层?

java - JSOUP 问题 - 无法找到或加载主类

java - 父类(super class)对子类对象的引用显示与子类对子类对象的引用相同的行为

javascript - 从 JavaScript 对象中删除错误

java - 应该将 Log4J 记录器声明为 transient 吗?