重写equals的同时,为何要重写hashCode,构成一致性原则?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1590个文字,预计阅读时间需要7分钟。
结论:+ 直接上结论:+ 重写equals不一定一定要重写hashCode,得看情况。+ 如果没有使用容器,其实是没有必要的。+ 如果使用了HashMap等容器,并且使用了自定义对象作为Key,则一定要重写。
结论
先直接上结论:
重写equals不一定要重写hashCode,得看情况。如果在没使用容器时其实是没必要的。
如果使用了HashMap等容器,并且使用了自定义对象作为Key是一定要重写的。
重写equals是为了在业务逻辑上判断实例之间是否相等。重写hascode是为了让集合快速判重。
hashCode()与 equals() 的规定:
1.如果两个对象相等,则 hashcode 一定也是相同的
2.两个对象相等,对两个 equals() 方法返回 true
3.两个对象有相同的 hashcode 值,它们也不一定是相等的
4.综上,equals() 方法被覆盖过,则 hashCode() 方法也必须被覆盖
5.hashCode() 的默认行为是对堆上的对象产生独特值。如果没有重写 hashCode(),则该 class 的两个对象无论如何都不会相等(即使这两个对象指向相同的数据)。
下面举个例子说明一定要重写。
本文共计1590个文字,预计阅读时间需要7分钟。
结论:+ 直接上结论:+ 重写equals不一定一定要重写hashCode,得看情况。+ 如果没有使用容器,其实是没有必要的。+ 如果使用了HashMap等容器,并且使用了自定义对象作为Key,则一定要重写。
结论
先直接上结论:
重写equals不一定要重写hashCode,得看情况。如果在没使用容器时其实是没必要的。
如果使用了HashMap等容器,并且使用了自定义对象作为Key是一定要重写的。
重写equals是为了在业务逻辑上判断实例之间是否相等。重写hascode是为了让集合快速判重。
hashCode()与 equals() 的规定:
1.如果两个对象相等,则 hashcode 一定也是相同的
2.两个对象相等,对两个 equals() 方法返回 true
3.两个对象有相同的 hashcode 值,它们也不一定是相等的
4.综上,equals() 方法被覆盖过,则 hashCode() 方法也必须被覆盖
5.hashCode() 的默认行为是对堆上的对象产生独特值。如果没有重写 hashCode(),则该 class 的两个对象无论如何都不会相等(即使这两个对象指向相同的数据)。
下面举个例子说明一定要重写。

