为什么重写equals还要重写hashCode

本文深入探讨了Java中equals和hashCode方法的关系与作用,解释了为何重写equals时需同步重写hashCode,以确保对象比较的准确性和效率。

equals和hashcode都是java.lang.Object类下的两个重要的方法。Object类是所有类的基类,因而言之,所有类都有这两种方法。但是为什么重写equais方法后还要重写hashCode呢?以下是我的一些见解:
首先:
当equals判断两个对象相等时,他们的hashcode必须相等;
当两个对象的hashcode相等时,他们的equals比较却不一定相等。
这又是为什么呢?
Object类默认的equals比较规则就是比较两个对象的内存地址。而hashcode是本地方法,java的内存是安全的,因此无法根据散列码得到对象的内存地址,但实际上,hashcode是根据对象的内存地址经哈希算法得来的。
假如这两个对象都重写了其equals方法,并且其属性相等,equals比较之后会返回true;但是如果并没有重写hashcode的话,其返回的依然是两个对象的内存地址,那么他们的hashcode不相同,这便不符合逻辑。
所以说:
重写equals方法后再重写hashcode是有原因的:
①能提高比较的准确性与严谨性;如果重写了equals方法,而没有重写hashcode方法,会出现equals相等的对象,hashcode不相等的情况,重写hashcode方法就是为了避免这种情况的出现。
②能提高比较效率,使用hashcode方法提前校验,可以避免每一次比对都调用equals方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值