首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java hashCode()方法是衡量对象相等性的可靠方法吗?

Java hashCode()方法是衡量对象相等性的可靠方法吗?
EN

Stack Overflow用户
提问于 2012-06-28 17:20:28
回答 3查看 1.6K关注 0票数 1

我目前正在比较两个相同类型的复杂对象,以及由自定义对象类型的数据结构组成的多个字段。假设没有自定义对象覆盖hashCode()方法,如果我比较对象中每个字段的哈希码,它们将被证明是相同的,我是否有100%的把握比较对象的内容是相同的?如果没有,假设我不能使用任何外部库,你会推荐哪种方法来比较两个对象。

EN

回答 3

Stack Overflow用户

发布于 2012-06-28 17:22:50

不,缺少hashCode()碰撞只意味着对象可能是相同的,这永远不能保证。

唯一的保证是,如果hashCode()的值不同(并且hashCode()/equals()实现是正确的),那么对象将不是equal

此外,如果您的自定义类型没有hashCode()实现,那么该值对于比较对象的内容是完全无用的,因为它将是identityHashCode()

票数 2
EN

Stack Overflow用户

发布于 2012-06-28 17:24:40

如果你没有重写hashCode()方法,那么你所有的对象都是不相等的。通过覆盖它,您提供了比较的逻辑。请记住,如果覆盖hashCode(),则绝对应该覆盖equals()EDIT:当然还有冲突,但如果你没有覆盖equal(),你的对象将通过引用进行比较(一个对象等于它自己)。

票数 0
EN

Stack Overflow用户

发布于 2012-06-28 17:27:37

通常,Object.hashCode()的JVM实现是以某种格式返回对象的内存地址,因此从技术上讲,这是您想要的(因为没有两个对象可以共享相同的地址)。

但是,Object.hashCode()的实际规范并没有提供保证,因此不应该在任何合理或编写良好的代码中用于此目的。

我建议使用Apache commons库中提供的hashCode和equals构建器,或者如果你真的不能使用免费的外部库,只需看看它们就可以获得灵感。使用的最佳方法完全取决于“相等”在应用程序域的上下文中的实际含义。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11241551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档