重写equals与hashCode的正确姿势
发布时间:2026/10/14 6:25:06 锦皓数字建站

在Java语言中为什么重写方法时必须重写方法呢其实这是Java的集合框架的设计原则决定的。根据Java对象的等价性原则如果两个对象被()方法认为是相等的那么他们的()方法必须返回相同的结果。大家可能会想, 我们到底为什么要去遵守这一条原则呢。原因在于, Java这个编程语言之中拥有很多的集合类, 好比有一些大家熟知的类型, 它们全部是基于散列算法来实现存储和检索元素的这一操作的。当这些集合类在处理数据的时候, 会调用对象身上的特定方法, 也就是()这个方法, 来专门计算并决定当前这个对象理应被放置在内存中的哪一个具体位置之上。同时呢, 当需要确认某个对象是不是已经在集合中存在的时刻, 又会去使用另外的一个方法, 也就是括号里填的第二个内容那个()方法来进行判断和查找。假设你有两个逻辑上相等的对象()方法返回true但他们的()方法返回了不同的结果。这时集合类可能会把这两个对象存储在不同的位置导致你不能正确地检索到已经存在的对象。这不仅会造成数据的冗余还可能引发其他的问题。反过来讲, 你要做到的一点就是, 假如对象在逻辑上是一样的话, 那么它们的哈希码始终都要一样, 这样一来, 集合类这些东西才能够正确地去执行存储和检索对象的这些操作任务。如何正确地重写方法呢当你去做重写方法这个动作的时候, 你必须要把下面的这些条件一个一个地看过来, 然后确认它们确实都被满足了。需要说的是, 如果按照那个被叫作()的方法来判断, 两个对象是相等的情况之下, 去调用这两个对象对应的那个方法的时候, 所产生的整数的结果必须是一样的, 必须是相同的整数结果才行。还有, 反过来讲, 要是说, 按照那个()方法来说的话, 这两个对象是不相等的话, 这也就是说, 去用这两个对象分别调用各自的方法之后所得到的整数结果, 并不是说一定要不相同的, 不是必须的。从总的方面来看, 重写这个操作, 它是必须得去做的, 因为只有这样, 才能确保当大家在Java的那个集合框架里进行使用的时候, 对象的那些行为表现是能够跟事先期待的那样一致的。
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。