equals hashcode protected

本文探讨equals方法的特性及与hashCode的关系,强调了它们在Java对象比较中的作用,包括自反性、对称性、传递性和一致性,以及hashCode的稳定性要求。还讨论了equals与hashCode的冲突和解决方案,以及如何确保在哈希表中的正确操作。
摘要由CSDN通过智能技术生成

equals

equals()方法 通常较多的都是用来比较值
性质:

  • 自反性:对于任意不为null的引用值x,x.equals(x)一定是true
  • 对称性:对于任意不为null的引用值x和y,当且仅当x.equals(y)是true时,y.equals(x)也是true
  • 传递性:对于任意不为null的引用值x、y和z,如果x.equals(y)是true,同时y.equals(z)是true,那么x.equals(z)一定是true
  • 一致性:对于任意不为null的引用值x和y,如果用于equals比较的对象信息没有被修改的话,多次调用时x.equals(y)要么一致地返回true要么一致地返回false
  • 对于任意不为null的引用值x,x.equals(null)返回false

hashCode

hashCode()方法给对象返回一个hash code值。

  • 在一个Java应用的执行期间,如果一个对象提供给equals做比较的信息没有被修改的话,该对象多次调用hashCode()方法,该方法必须始终如一返回同一个integer。
  • 如果两个对象根据equals(Object)方法是相等的,那么调用二者各自的hashCode()方法必须产生同一个integer结果。

equals和hashcode比较

  • 1.如果两个对象相同,那么它们的hashCode值一定要相同
  • 2.如果两个对象的hashCode相同,它们并不一定相同(这里说的对象相同指的是用eqauls方法比较), 如不按要求去做了,会发现相同的对象可以出现在Set集合中,同时,增加新元素的效率会大大下降。
  • 3.equals()相等的两个对象,hashcode()一定相等;equals()不相等的两个对象,却并不能证明他们的hashcode()不相等。

换句话说,equals()方法不相等的两个对象,hashcode()有可能相等(我的理解是由于哈希码在生成的时候产生冲突造成的)。反过来,hashcode()不等,一定能推出equals()也不等;hashcode()相等,equals()可能相等,也可能不等。

protected

  • 基类的protected成员是包内可见的,并且对子类可见;
  • 若子类与基类不在同一包中,那么在子类中,子类实例可以访问其从基类继承而来的protected方法,而不能访问基类实例的protected方法。

参考:https://blog.csdn.net/zj15527620802/article/details/88547914

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值