首页 > Java > java教程 > 如何正确重写 Java 中的 equals() 方法以进行自定义对象比较?

如何正确重写 Java 中的 equals() 方法以进行自定义对象比较?

Barbara Streisand
发布: 2024-12-27 08:16:09
原创
373 人浏览过

How to Properly Override the equals() Method in Java for Custom Object Comparisons?

重写Java中的Equals方法

在Java中,equals方法负责判断两个对象是否相等。默认情况下,equals 方法比较对象引用,这不是许多自定义类所需的行为。要重写 equals 方法并定义自定义相等语义,应遵循以下准则:

  • 检查 null: 该方法应首先检查传递的对象是否为 null 并返回如果是,则为 false。
  • 检查类型: 验证传递的对象与调用对象的类型相同。如果不是,则返回 false。
  • 比较字段:确定定义相等性的相关字段并比较它们的值。
  • 使用运算符优先级:使用运算符优先级,以确保在使用之前检查潜在的空值

解决方案:

提供的代码尝试使用 equals 方法比较整数字段(年龄),该方法仅适用于字符串。要纠正此问题,应将年龄字段的相等性检查替换为使用 == 运算符的比较:

...
} else {
    People otherPeople = (People) other;
    result = name.equals(other.name) && other.age == age;
}
...
登录后复制

用法:

以下代码演示如何使用重写的 equals 方法:

...
// Add several Person objects to an ArrayList
people.add(new Person("Subash Adhikari", 28));
people.add(new Person("K", 28));
people.add(new Person("StackOverflow", 4));
people.add(new Person("Subash Adhikari", 28));

// Compare each pair of Person objects using the overridden equals method
for (int i = 0; i < people.size() - 1; i++) {
    for (int y = i + 1; y <= people.size() - 1; y++) {
        boolean check = people.get(i).equals(people.get(y));
        System.out.println("-- " + people.get(i).getName() + " - VS - " + people.get(y).getName());
        System.out.println(check);
    }
}
...
登录后复制

此代码将生成以下内容输出:

-- Subash Adhikari - VS - K false
-- Subash Adhikari - VS - StackOverflow false
-- Subash Adhikari - VS - Subash Adhikari true
-- K - VS - StackOverflow false
-- K - VS - Subash Adhikari false
-- StackOverflow - VS - Subash Adhikari false
登录后复制

此输出演示了重写的 equals 方法根据名称和年龄字段正确比较 Person 对象。

以上是如何正确重写 Java 中的 equals() 方法以进行自定义对象比较?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板