==、equals()、hashCode()

==、equals()、hashCode()

==

==是逻辑运算符,用于判断两个对象是否相等,无论基本数据类型还是引用类型,它比较的都是对象是否相等或者说地址是否相等。

equals()

equals()是Object类中的方法,用于比较两个对象是否相等。

Object类中的equals()方法使用==实现的,也就是说使用equals()与使用 == 的效果是一样的。

但是对于引用类型,当 == 比较的地址不相同时并不代表对象内容不同,此时我们就需要重写equals()方法来自定义比较算法。

需要注意的是,String类已经为我们重写了equals()方法,所以可以直接使用equals()来比较两个String。

HashCode

什么是HashCode?

HashCode中文名称是散列码,HashCode是根据特定的算法对每个对象生成的唯一的值。

主要用于在HashMap、HashSet等哈希表中快速定位元素以及确保元素的唯一性。

hashCode()与equals()

hashCode()是native方法,使用C或C++实现的。

equals()是用来确定元素是否相等的。

hashCode()与equals()都是Object类中的方法,也就是说所有的类中都有这两个方法。

一般我们重写equals()方法时也要重写hashCode()方法。

确定两个对象相等时,它们的HashCode也必须相等。一个好的判断HashCode的算法应该确保对象的HashCode均匀分布,尽量减少哈希冲突的现象(所谓哈希冲突,就是两个不同的对象取得了相同的HashCode)。也就是说对于两个对象:

  • hashCode()相等时不一定相等,还要equals()相等才能确定相等
  • equals()相等时,一定要确保hashCode()也相等
  • hashCode()不相等时就可以确定两个对象不相等

在HashSet中,我们需要保证元素的唯一性,对于一个元素,我们需要通过hashCode()来获取其HashCode,如果没有其它元素的HashCode与其相等,就将这个元素添加进HashSet中,如果有其它元素与其HashCode相等,此时由于可能会出现哈希冲突的问题,还不能确定元素是否相同,需要使用equals()方法再次比较,equals()与hashCode()都相等时才能确定两个元素相等,就不能将该元素加入HashSet中。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值