美文网首页
Object类的equals方法

Object类的equals方法

作者: JAVA加油 | 来源:发表于2023-07-02 07:30 被阅读0次

Object类的equals方法

Object类是所有Java类的根类,它提供了一些通用的方法,其中包括equals()方法。equals()方法用于比较两个对象是否相等,它的默认实现是比较两个对象的内存地址是否相等,即它们是否引用同一个对象。如果没有在子类中重写equals()方法,则默认的实现与==操作符是等价的。

如果需要比较两个对象的属性值是否相等,就需要在子类中重写equals()方法,并在方法中比较对象的属性值。在重写equals()方法时,需要满足以下条件:

自反性:对于任何非null的引用值x,x.equals(x)应该返回true。

对称性:对于任何非null的引用值x和y,如果x.equals(y)返回true,那么y.equals(x)也应该返回true。

传递性:对于任何非null的引用值x、y和z,如果x.equals(y)返回true,并且y.equals(z)也返回true,那么x.equals(z)也应该返回true。

一致性:对于任何非null的引用值x和y,如果在equals()比较中使用的信息没有被修改,那么多次调用x.equals(y)应该始终返回true或始终返回false。

非空性:对于任何非null的引用值x,x.equals(null)应该返回false。

例如,假设有如下的Person类:

public class Person {    private String name;    private int age;    public Person(String name, int age) {        this.name = name;        this.age = age;}    // 省略getter和setter方法    // 这里没有重写equals()方法}

如果我们创建两个Person对象,并用==操作符比较它们,返回的结果将是false,因为它们引用的是不同的对象:

Person person1 = new Person("Tom", 20);Person person2 = new Person("Tom", 20);System.out.println(person1 == person2); // 输出:false

如果我们想要比较Person对象的属性值是否相等,可以在Person类中重写equals()方法:

public class Person {    private String name;    private int age;    public Person(String name, int age) {        this.name = name;        this.age = age;}    // 省略getter和setter方法    @Override    public boolean equals(Object obj) {        if (obj == this) {            return true;}        if (!(obj instanceof Person)) {            return false;}        Person other = (Person) obj;        return Objects.equals(name, other.name) && age == other.age;}}

这个重写的equals()方法首先判断参数是否为该对象本身,如果是,则直接返回true;如果不是,再判断参数是否属于Person类,如果是,则将参数转换为Person类型,并比较两个对象的name和age属性是否相等。如果两个属性都相等,则返回true,否则返回false。

这样,当我们使用equals()方法比较两个Person对象时,返回的结果将是true,因为它们的属性值相等:

Person person1 = new Person("Tom", 20);Person person2 = new Person("Tom", 20);System.out.println(person1.equals(person2)); // 输出:true

因此,重写equals()方法可以方便我们比较两个对象的属性值是否相等。

相关文章

网友评论

      本文标题:Object类的equals方法

      本文链接:https://www.haomeiwen.com/subject/bgxgydtx.html