Java常用API—Object类—equals关键字
1、Object类原生的equalsI()方法是这样的:
public boolean equals(Object obj) {
return (this == obj);
}
可以看出,Object类中的equals()方法就是很简单的比较对象地址是否相同,所以一般需要重写Object类的该方法来达到equals()方法应有的作用。
2、 重写equals()方法:
下面同过一个例子来阐述如何重写equals()方法。
创建一个POJO(普通的JavaBean),用来存储接收数据。本例比较两个人的年龄。
Person.java
TestEquals.java
结果:
如下进行重写(覆盖)Object类中的equals()方法:
Person.java
结果:
上述代码基本实现了需求功能。
3、完善重写的方法,使其更健壮:
①
虽然上述代码实现了需求,但是不够健壮,因为o对象为Object类型的,所以可以传递任意类型的对象进来,如果把一个Pig类型的对象传递进来,显然Person无法做到强转,会报出
这种异常。
TestEquals.java
解决这个问题,应该使用instanceof关键字,具体方法如下:
Person.java
这样运行上面的TestEquals.java
结果如下:
不会再出现类型转换异常出现。
② 如果equals传入null,可以在equals方法中再增加一条判断,对参数o,进行非null判断。
if( o == null) {
returnfalse;
}
③ 当传入的是o本身,则也要进行判断:
if (this == o) {
return true;
}
以上两点,用来提高程序的执行效率。