hashcode 和 equals
郭旭升 Lv6

为什么要重写方法

默认的hashcode 和 equals方法都是继承自Object类中。
equals方法去判断两个对象引用的地址是否相同。

在一般情况中,比如创建了两个用户对象,参数相同的情况下,equals方法对比,结果为false。因为是new出来的两个对象,引用指向的地址一定不同,所以equals结果为false。

hashcode也不同。 放入map或者set中时,两个相同的对象,却会重复出现两次。违背了map和set的特性。本来想要像个相同的对象判断成了不同的对象,为了达到目的,让我们认为两个相同的对象判断也是同一个对象,所以需要重写原来的hashcode和equals方法。

原因:
set根据hashcode 是否相同,在判断equals是否相同来判断是否为同一个对象。
map根据key值的hashcode值分配和获取对象保存数组下标,然后根据equals判断是否唯一。

什么时候重写

如何重写

只重写equals方法也不行,因为在集合中判断两个对象是否相同时,会用到hashcode方法,所以重写equals同时也要重写hashcode方法。

 Comments