Java中重写equals后,为何不重写hashCode会导致哪些问题?
- 内容介绍
- 文章标签
- 相关推荐
本文共计865个文字,预计阅读时间需要4分钟。
原文:本文字为博主原创,未经允许不得转载:1.equals方法和hashCode方法之间的关系,这两个方法都是Object的方法,意味着如果一个对象没有重写这两个方法时,都会默认采用Object类中的方法实现。
博主原创,严禁转载。1. equals()与hashCode()方法关联,均为Object类方法。若未重写,则默认调用Object类中的实现。
本文为博主原创,未经允许不得转载:
1.equals和hashCode方法之间的关系这两个方法都是Object的方法,意味着若一个对象在没有重写这两个方法时,都会默认采用Object类中的方法实现,它们的关系为:
-
如果两个对象通过equals()方法比较相等,那么这两个对象的hashCode一定相同。
-
如果两个对象hashCode相同,不能证明两个对象是同一个对象(不一定相等),只能证明两个对象在散列结构中存储在同一个地址(不同对象hashCode相同的情况称为hash冲突)。
Effective Java 第三版中描述为什么重写equals方法后必须重写hashCode方法:
每个覆盖了equals方法的类中,必须覆盖hashCode。如果不这么做,就违背了hashCode的通用约定,也就是上面注释中所说的。
本文共计865个文字,预计阅读时间需要4分钟。
原文:本文字为博主原创,未经允许不得转载:1.equals方法和hashCode方法之间的关系,这两个方法都是Object的方法,意味着如果一个对象没有重写这两个方法时,都会默认采用Object类中的方法实现。
博主原创,严禁转载。1. equals()与hashCode()方法关联,均为Object类方法。若未重写,则默认调用Object类中的实现。
本文为博主原创,未经允许不得转载:
1.equals和hashCode方法之间的关系这两个方法都是Object的方法,意味着若一个对象在没有重写这两个方法时,都会默认采用Object类中的方法实现,它们的关系为:
-
如果两个对象通过equals()方法比较相等,那么这两个对象的hashCode一定相同。
-
如果两个对象hashCode相同,不能证明两个对象是同一个对象(不一定相等),只能证明两个对象在散列结构中存储在同一个地址(不同对象hashCode相同的情况称为hash冲突)。
Effective Java 第三版中描述为什么重写equals方法后必须重写hashCode方法:
每个覆盖了equals方法的类中,必须覆盖hashCode。如果不这么做,就违背了hashCode的通用约定,也就是上面注释中所说的。

