hashcode 和 equals
为什么要重写方法
默认的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方法。
- Post title:hashcode 和 equals
- Post author:郭旭升
- Create time:2022-11-20 14:21:23
- Post link:2022/11/20/hashcode-和-equals/
- Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.
Comments