• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
K6-X4黑骑士君
博客园    首页    新随笔    联系   管理    订阅  订阅

hashcode() 和 equals() 的作用 区别 联系

hashCode() 和 equals() 方法的作用其实一样, 都是用来对比两个对象是否相等, 都需要自己去覆写来提高对比效率和准确度, 在向 hashSet, hashMap 等底层用 hash值 判断的集合中存值时, 被存储的对象都需要覆写这两个方法.

hashCode() 方法返回一个哈希值, 可以用作对比对象, 不同的对象所产生的哈希值不同, 但并不唯一, 它是通过 hash 函数(一种算法)得到的, 同一个类的对象按照自己不同的特征尽量的有不同的哈希值, 但不表示不同的对象哈希值完全不同.

equals() 方法返回一个 boolean值, 在不进行覆写的情况下会直接对比对象的内存地址, 在覆写的情况下则会根据覆写的对比规则进行对比.

既然 hashCode() 和 equals() 都是用来对比对象是否相等的, 那什么时候使用 hashCode(), 什么时候使用 equals() 呢?

首先 equals() 方法的对比规则是由自己去覆写的, 对比规则相对复杂全面, 所以导致效率较低, 而 hashCode() 则直接去用其生成的 hash值 进行比较, 效率很高, 但是 hash值 并不是完全可靠, 有时不同的对象生成的 hash值 也会相同, 所以可以得出结论: 在覆写 equals() 方法时, 也会同时覆写 hashCode() 方法, 每当需要对比的时候, 先用 hashCode() 去对比, 如果 hashCode() 不同, 则表示这两个对象肯定不相同, 所以就不需要再用 equals() 进行对比. 如果 hashCode() 相同, 那再去用 equals() 进行比较, 如果 equals() 也相同, 那表示这两个对象是真的相同了. 这样在大大提高数据对比效率的同时也保证了对比的准确性.

posted @ 2020-06-28 21:48  K6-X4黑骑士君  阅读(140)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3