📜  Java中的级别 equals() 方法和示例(1)

📅  最后修改于: 2023-12-03 15:02:03.170000             🧑  作者: Mango

Java中的equals()方法和示例

在Java中,equals()方法用于比较两个对象是否相等。之所以需要equals()方法,是因为两个对象之间的比较不能像基本数据类型一样进行。不同的对象可能拥有不同的创建方式,内部数据可能也不相同,所以需要equals()方法比较对象的内容是否相等。

equals()方法的定义

equals()方法是Object类的一个非静态方法,其定义如下:

public boolean equals(Object obj)

其中,obj表示需要比较的另外一个对象。equals()方法返回一个boolean类型,如果两个对象相等,则返回true,否则返回false。

需要注意的是,在比较两个对象时,如果不自定义equals()方法,则会调用Object类中默认的equals()方法,该方法会比较两个对象的引用是否相同。也就是说,如果两个对象的引用不同,则其默认情况下不相等。

重写equals()方法的步骤

如果我们想要自定义equals()方法来比较对象的内容是否相同,那么就需要重写Object类中的equals()方法。具体步骤如下:

  1. 检查两个对象是否指向同一个地址。如果是,直接返回true。
  2. 检查对象类型是否相同。如果不同,返回false。
  3. 对需要比较的属性进行比较。

需要注意的是,如果我们对equals()方法进行了重写,那么也应该同时重写hashCode()方法。因为hashCode()方法和equals()方法是有关联的,如果两个对象的hashCode()值不同,那么其equals()方法也一定不相等。

equals()方法示例

下面是一个自定义的Person类,我们来重写其equals()方法。

public class Person {
    private int id;
    private String name;

    public Person(int id, String name) {
        this.id = id;
        this.name = name;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) // 检查两个对象是否指向同一个地址
            return true;
        if (obj == null) // 检查对象类型是否相同
            return false;
        if (getClass() != obj.getClass())
            return false;
        Person other = (Person) obj; // 强制类型转换
        if (id != other.id) // 对需要比较的属性进行比较
            return false;
        if (name == null) {
            if (other.name != null)
                return false;
        } else if (!name.equals(other.name))
            return false;
        return true;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + id;
        result = prime * result + ((name == null) ? 0 : name.hashCode());
        return result;
    }
}

在这个例子中,我们首先比较两个对象是否指向同一个地址,如果是,则直接返回true。接下来,我们检查对象类型是否相同,如果不同则返回false。最后,比较需要比较的属性,如果不相等,则返回false。如果两个对象完全相同,则返回true。

这是一种比较简单的equals()方法实现方式。如果需要完全匹配,可能需要比较更多的属性。同时,需要注意可能会出现空指针异常。

总结

在Java中,equals()方法用于比较两个对象是否相等。默认情况下,equals()方法比较的是对象的引用地址。如果我们想要比较对象的内容是否相等,则需要自定义equals()方法,并按照一定的步骤进行实现。在实现equals()方法时,需要注意空指针异常以及与hashCode()方法的关联。