首页 >Java >java教程 >如何为具有字符串和整数字段的对象正确重写 Java 中的 equals() 方法?

如何为具有字符串和整数字段的对象正确重写 Java 中的 equals() 方法?

DDD
DDD原创
2024-12-23 03:39:15797浏览

How to Correctly Override the equals() Method in Java for Objects with String and Integer Fields?

重写 Java 中的 Equals 方法

在 Java 中,equals 方法是比较对象是否相等的基本工具。当您在自定义类中重写 equals 方法时,您可以定义特定标准来确定该类的两个对象是否等效。

理解问题

考虑具有姓名和年龄字段的人员类。要比较两个 Person 对象是否相等,您可以重写 equals 方法。但是,如果年龄字段是整数,则尝试使用 equals 方法进行比较时可能会遇到错误,该方法旨在比较字符串。

解决方案

要解决这个问题,可以使用相等运算符 == 来比较整数。下面是一个处理字符串和整数比较的重写 equals 方法的示例:

@Override
public boolean equals(Object obj) {
    if (obj == null) {
        return false;
    }

    if (obj.getClass() != this.getClass()) {
        return false;
    }

    final Person other = (Person) obj;
    if ((this.name == null) ? (other.name != null) : !this.name.equals(other.name)) {
        return false;
    }

    if (this.age != other.age) {
        return false;
    }

    return true;
}

在此修改后的代码中:

  • 我们首先执行空检查和类检查以确保我们正在比较两个有效的 Person 对象。
  • 我们使用 equals 方法比较名称字段,因为它们是字符串。
  • 我们使用 == 运算符来比较年龄字段,因为它们是整数。

示例用法

这里有一个示例如何使用重写的 equals 方法:

public class Main {

    public static void main(String[] args) {
        List<Person> people = new ArrayList<>();
        people.add(new Person("John Doe", 30));
        people.add(new Person("Jane Doe", 25));

        // Check for equality using the overridden equals method
        boolean equal = people.get(0).equals(people.get(1));
        System.out.println(equal); // Output: false
    }
}

在此示例中, equals 方法正确判断两个不同名字和年龄的 Person 对象不相等。

以上是如何为具有字符串和整数字段的对象正确重写 Java 中的 equals() 方法?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn