hashCode 与 equals?

重写 hashCode 和 equals 方法是为了维护对象相等性的一致性。当我们重写 equals 方法时,我们改变了对象相等的定义,通常是根据对象的内容来判断它们是否相等,而不仅仅是比较内存地址。但是,如果我们只重写 equals 方法而不重写 hashCode 方法,就会违反 hashCode 的契约条件。

根据 hashCode 的契约条件,当两个对象通过 equals 方法比较相等时,它们的 hashCode 必须相等。因此,如果我们在 equals 方法中改变了相等的定义,那么就需要相应地重写 hashCode 方法,以保证相等的对象具有相等的哈希码。

如果两个对象的 hashCode 不相等,那么它们被存储在基于哈希的集合中时,可能会被认为是不同的对象,即使它们的 equals 方法返回 true。这会导致无法正确地查找和访问这些对象。为了正确地使用基于哈希的集合,我们需要重写 hashCode 方法,使其与 equals 方法一致,从而确保相等的对象具有相等的哈希码。

总结起来,重写 equals 方法时必须重写 hashCode 方法,以维护对象相等性的一致性,确保相等的对象具有相等的哈希码,从而正确地使用基于哈希的集合和映射等数据结构。

标签: java, Java面试题, Java问题合集, Java编程, Java问题精选, Java常见问题