总结Java equals()和hashCode()的联系

Java equals()和hashCode()的联系

  1. 如果两个对象是相等的,那么它们必须有相同的哈希码。
  2. 如果两个对象具有相同的哈希码,他们可能相等,可能不相等。
    1. 如果两个对象是不同的类的实例 他们hashCode可能相等。
    2. 当两个对象是同一个类型的实例,他们hashCode相等,则他们相等。

约定:equals()为真那么hashCode也要相等。
结论:

一,equals()相等的两个对象,hashcode()一定相等。
二,equals()不相等的两个对象,却并不能证明他们的hashcode()不相等。
换句话说,equals()方法不相等的两个对象,hashcode()有可能相等。 (我的理解是由于哈希码在生成的时候产生冲突造成的)。
三,反过来:hashcode()不等,一定能推出equals()也不等(因为如果equals()相等的话就和第一条矛盾了);转自这里

原则:

判断相等用equals(),判断不相等用 hashcode();

重写equals()遵循的原则:

对称性:如果x.equals(y)返回是“true”,那么y.equals(x)也应该返回是“true”。
反射性:x.equals(x)必须返回是“true”。
类推性:如果x.equals(y)返回是“true”,而且y.equals(z)返回是“true”,那么z.equals(x)也应该返回是“true”。
一致性:如果x.equals(y)返回是“true”,只要x和y内容一直不变,不管你重复x.equals(y)多少次,返回都是“true”。
任何情况下,x.equals(null),永远返回是“false”;x.equals(和x不同类型的对象)永远返回是“false”。

 

posted @   一杯半盏  阅读(160)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示