hashcode和equals

本文详细解析了Java中equals方法与hashCode方法的关系及其重要性。强调了在重写equals方法时,必须同时重写hashCode方法以确保对象一致性。并解释了在HashSet与HashMap中对象比较的具体过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

若两个对象equals相等(重写了equals方法),但不在一个区间(没有重写hashcode方法),因为hashCode的值在重写之前是对内存地址计算得出,所以根本没有机会进行比较,会被认为是不同的对象。所以Java对于eqauls方法和hashCode方法是这样规定的: 
1 如果两个对象相同,那么它们的hashCode值一定要相同。也告诉我们重写equals方法,一定要重写hashCode方法,也就是说hashCode值要和类中的成员变量挂上钩,对象相同–>成员变量相同—->hashCode值一定相同。 
2 如果两个对象的hashCode相同,它们并不一定相同,这里的对象相同指的是用eqauls方法比较。

注意:仅仅重写equals方法,按道理应该是不对的,在重写equals方法时,也要重写hashcode方法,并且要保持判断的一致性。做到相等(equals)的两个对象的hashcode一定要相同。

hashset,hashmap中放入对象时,会先判断hashcode,hashcode不同,则认为是不同的对象;如果hashcode相同,则去比较equals,如果equals不同,则认为不同对象,相同则认为是相同对象。(实际上他还用==比较了对象,请看下面链接所写文章)

https://blog.youkuaiyun.com/qq_21688757/article/details/53067814?ticket=ST-56532-unjRzSC7ufBt3I3nKejO-passport.youkuaiyun.com

转载于:https://my.oschina.net/u/729924/blog/1830792

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值