前言
根据阿里《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
也必须相等 - 两个对象