首页 > Java > Java面试题 > 正文

两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?

畫卷琴夢
发布: 2025-11-12 03:55:21
原创
835人浏览过
hashCode相同不代表equals一定为true,如"Aa"与"BB"哈希值相同但不相等;而equals为true时hashCode必须相同,这是Object规范要求,确保集合类正常工作。

两个对象的 hashcode()相同,则 equals()也一定为 true,对吗?

不对。

hashCode() 相同,equals() 不一定为 true

在 Java 中,两个对象的 hashCode() 相同,并不意味着它们的 equals() 一定返回 true。这是因为 hashCode 的设计允许“哈希冲突”——即不同的对象可能拥有相同的哈希值。

例如:

  • String 对象 "Aa" 和 "BB" 的 hashCode() 是相同的(都是 2112),但它们显然不是相等的对象,equals() 返回 false。
  • hashCode 的取值范围有限(int 类型,最多约 42 亿种值),而对象内容的组合几乎是无限的,因此不同对象产生相同哈希值是不可避免的。

equals() 为 true,则 hashCode() 必须相同

反过来,如果两个对象用 equals() 比较返回 true,那么它们的 hashCode() 必须相等。这是 Object 类规范中明确要求的,否则会导致 HashMap、HashSet 等集合类行为异常。

标书对比王
标书对比王

标书对比王是一款标书查重工具,支持多份投标文件两两相互比对,重复内容高亮标记,可快速定位重复内容原文所在位置,并可导出比对报告。

标书对比王 58
查看详情 标书对比王

所以正确的逻辑是:

  • 如果 equals() 返回 true → 那么 hashCode() 必须相同
  • 如果 hashCode() 相同不一定 equals() 为 true

总结

hashCode 相同只是 equals 的必要非充分条件。它用于提高查找效率,但最终判断对象是否相等还是要看 equals 方法。

基本上就这些。

以上就是两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?的详细内容,更多请关注php中文网其它相关文章!

相关标签:
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号