对象识别之重写对象equals()和hashCode()方法

本文探讨了对象比较的两种方式:'=='和equals()。当重写equals()方法时,也需要重写hashCode()以确保一致性。equals主要保证对象内容相等,而hashCode则用于提高查找效率,允许存在哈希冲突。在Hibernate等场景下,正确重写这两个方法对于对象比较至关重要。
摘要由CSDN通过智能技术生成

1、对象比较是否相等的两种方法

1、通过“==”进行比较,这种比较的是两个对象的引用地址是否相同,即两个引用地址是否指向了同一对象
2、通过equals()方法进行比较,但是在Object类的源码中我们可以看到:因此它实际上还是通过方法1进行比较的。但是我们可以重写equals()方法。

2、为什么重写equals()方法就必须重写hashcode()方法呢?


equals - 保证比较对象是否是绝对相等的
hashCode - 保证在最快的时间内判断两个对象是否相等,可能有误差值
一个是保证可靠,一个是保证性能。也就是说:
同一个对象的hashCode一定相等,不同对象的hashCode也可能相等,这是因为hashCode是根据地址hash出来的一个int 32 位的整型数字,相等是在所难免,这里可以想象一下hash的链表图。
equals比较的是两个对象的地址,同一个对象地址肯定相同,不同的对象地址一定不同,可靠性是这么来的。

在Hibernate中,如果是在同一个session中根据相同查询所得到的相同记录,则它们会拥有相同的Java识别

如果有必要比较通过查询后两个对象的内容是否相同,必须重写 equals()与hashCode()。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值