基本概念
equals()方法是Object类中的方法,通过Object类中的equals()方法我们可以知道,该方法是比较两个对象的内存地址是否相等,下面简单介绍一下这一个方法。
Object类中的equals()方法如下:
public boolean equals(Object obj) {
return (this == obj);
}
equals()方法
Object类中的equals()方法是比较两个对象的地址是否相等,这个比较方式不适合我们自定义类的对象的比较;例如,如果有一个类Person,类中有name和age两个属性,我们认为只要这个类的两个对象中的name和age都分别相等,那么他们就是相等的,所以不能使用Object类中的equals()方法用于判断Person类的两个对象是否相等,因为它是比较两个对象的内存地址是否相等。这个时候就需要为自定义类重写Object类中的equals()方法。
重写equals()方法的代码如下(仅供参考):
注意:equals()方法的重写取决于我们如何定义两个对象是否相等,你可以比较类中的一个属性是否相等,例如Person类中的name属性,如果两个对象中的name属性相等,你可以认为这两个对象相等。文中重写的equals()方法是比较类中的所有属性,即只有两个对象中的所有属性都相等,才可以认为这个类的两个对象相等。
@Override
public boolean equals(Object otherObject) {
// 判断两个对象是否为同一个对象
if (this == otherObject) {
return true;
}
// 判断所比较对象是否为null
if (otherObject == null) {
return false;
}
// 判断两个对象是否属于同一个类的对象
if (this.getClass() != otherObject.getClass()) {
return false;
}
// 强制类型转换
Person other = (Person) otherObject;
// 进行属性比较
return Objects.equals(this.name, other.name)
&& this.age == other.age;
}
下面简单分析一下这段代码:第一个判断主要是为了判断所要进行比较的两个对象是否为同一个对象,如果是同一个对象,直接返回true,下面的代码就没有必要执行了,可以提高比较的效率;第二个判断主要是判断所比较对象是否为null,如果为null,直接返回false表示两个对象不相等,因为第一个对象调用equals()方法,所以第一个对象不能为null,不然程序执行会报空指针,所以第二个对象为null,那么这两个对象肯定不相等;第三个条件用于判断这两个对象是否是同一个类的对象,如果不是同一个类,也没有比较是否相等的意义;接下来就是将所比较对象进行强制转换,最后进行类中各个属性之间的比较,这里有一点需要注意,就是name属性在进行比较时,最好使用Objects类中的equals()方法进行比较,因为使用String类的equals()方法进行比较,如果第一个对象的name属性的值为null,这个程序运行期间会报空指针异常。