Java中重写equals方法

在重写equals方法之前,首先要了解为什么要重写equals方法,以及关于重写equals方法的相关约定。

[b]一.为什么要重写equals方法呢?[/b]

Object类是Java中所有类的基类,Object类中的equals方法用与检测一个对象是否等于另一个对象。如果两个引用指向一个同一个对象,则equals返回true,否则返回false;Object中equals方法实际是比较两个对象的内存地址是否相等。

Object类中equals方法定义如下:
public boolean equals(Object obj) {
return (this == obj);
}

而在实际应用过程中,我们并不关心对象的内存地址,往往需要比较两个对象实际状态,所以需要重写equals方法。

[b]二.重写equals方法的相关约定[/b]

1 自反性:对于任意的引用值x,x.equals(x)一定为true。
2 对称性:对于任意的引用值x 和 y,当x.equals(y)返回true,y.equals(x)也一定返回true。
3 传递性:对于任意的引用值x、y和z,如果x.equals(y)返回true,并且y.equals(z)也返回true,那么x.equals(z)也一定返回 true。
4 一致性:对于任意的引用值x 和 y,如果用于equals比较的对象信息没有被修改,多次调用x.equals(y)要么一致地返回true,要么一致地返回false。
5 非空性:对于任意的非空引用值x,x.equals(null)一定返回false。

[b]三.重写equals方法[/b]

在重写equals方法时,最好要重写hashcode方法,否则两个相等的对象,hashcode可能不相等。如定义个People类,如果People类的属性name、age值相等,则认为两个People类的实力相等,在People类中重写equals方法。
	@Override
public boolean equals(Object obj) {

if(this == obj){ //先判断是否是同一个对象
return true;
}

if(obj == null){ //如果对象为null,返回false
return false;
}

//判断两个对象是否属于同一个类
if(!(obj instanceof People)){
return false;
}

//把obj对象转为具体的对象类型,比较状态是否相等。
People p = (People)obj;

if((p.getName().equals(this.getName()))
&& (p.getAge() == this.getAge())){
return true;
}
return false;
}


[b]小结:[/b]

重写分为4步:
1.比较是否是同一个对象;
2.判断对象是否为null;
3.把要比较的对象从Object转为具体的类型;
4.比较对象中的相关的属性是否相等;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值