前言
根据阿里《Java开发手册》,对 Java 对象的 hashCode 和 equals 方法,有如下强制约定。
[强制] 关于 hashCode 和 equals 的处理,遵循如下规则
1)只要覆写 equals,就必须覆写 hashCode。
2)因为 Set 存储的是不重复的对象,依据 hashCode 和 equals 进行判断,所以 Set 存储的对象必须覆写这两个方法。
3)如果自定义对象作为 Map 的键,那么必须覆写 hashCode 和 equals。
说明:String 已经覆写 hashCode 和 equals 方法,所以我们可以愉快地使用 String 对象作为 key 来使用。
下面进行必要的补充分析。
equals保证可靠性,hashCode保证性能
equals 保证可靠性, hashCode 保证性能。
equals 和 hashCode 都可用来判断两个对象是否相等,但是二者有区别
equals可以保证比较对象是否是绝对相等,即「equals保证可靠性」hashCode用来在最快的时间内判断两个对象是否相等,可能有「误判」,即「hashCode保证性能」- 两个对象
equals为 true 时,要求hashCode也必须相等 - 两个对象

本文探讨了Java中对象的hashCode和equals方法的重要性,遵循阿里开发手册的强制约定,强调当覆写equals时必须覆写hashCode。讨论了在自定义对象作为Set元素和Map键时覆写这两个方法的必要性,以及不正确覆写可能导致的内存溢出问题。通过示例代码展示了如何正确实现equals和hashCode以避免此类问题。
最低0.47元/天 解锁文章
557

被折叠的 条评论
为什么被折叠?



