Java中重写equals后,为何不重写hashCode会导致哪些问题?

2026-05-19 15:500阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计865个文字,预计阅读时间需要4分钟。

Java中重写equals后,为何不重写hashCode会导致哪些问题?

原文:本文字为博主原创,未经允许不得转载:1.equals方法和hashCode方法之间的关系,这两个方法都是Object的方法,意味着如果一个对象没有重写这两个方法时,都会默认采用Object类中的方法实现。

博主原创,严禁转载。1. equals()与hashCode()方法关联,均为Object类方法。若未重写,则默认调用Object类中的实现。

本文为博主原创,未经允许不得转载:

1.equals和hashCode方法之间的关系

  这两个方法都是Object的方法,意味着若一个对象在没有重写这两个方法时,都会默认采用Object类中的方法实现,它们的关系为:

  1. 如果两个对象通过equals()方法比较相等,那么这两个对象的hashCode一定相同。

  2. 如果两个对象hashCode相同,不能证明两个对象是同一个对象(不一定相等),只能证明两个对象在散列结构中存储在同一个地址(不同对象hashCode相同的情况称为hash冲突)。

2.为什么重写equals 后需要重写 hashCode

  Effective Java 第三版中描述为什么重写equals方法后必须重写hashCode方法:

每个覆盖了equals方法的类中,必须覆盖hashCode。如果不这么做,就违背了hashCode的通用约定,也就是上面注释中所说的。

阅读全文

本文共计865个文字,预计阅读时间需要4分钟。

Java中重写equals后,为何不重写hashCode会导致哪些问题?

原文:本文字为博主原创,未经允许不得转载:1.equals方法和hashCode方法之间的关系,这两个方法都是Object的方法,意味着如果一个对象没有重写这两个方法时,都会默认采用Object类中的方法实现。

博主原创,严禁转载。1. equals()与hashCode()方法关联,均为Object类方法。若未重写,则默认调用Object类中的实现。

本文为博主原创,未经允许不得转载:

1.equals和hashCode方法之间的关系

  这两个方法都是Object的方法,意味着若一个对象在没有重写这两个方法时,都会默认采用Object类中的方法实现,它们的关系为:

  1. 如果两个对象通过equals()方法比较相等,那么这两个对象的hashCode一定相同。

  2. 如果两个对象hashCode相同,不能证明两个对象是同一个对象(不一定相等),只能证明两个对象在散列结构中存储在同一个地址(不同对象hashCode相同的情况称为hash冲突)。

2.为什么重写equals 后需要重写 hashCode

  Effective Java 第三版中描述为什么重写equals方法后必须重写hashCode方法:

每个覆盖了equals方法的类中,必须覆盖hashCode。如果不这么做,就违背了hashCode的通用约定,也就是上面注释中所说的。

阅读全文