equals和hashcode都是java.lang.Object类下的两个重要的方法。Object类是所有类的基类,因而言之,所有类都有这两种方法。但是为什么重写equais方法后还要重写hashCode呢?以下是我的一些见解:
首先:
当equals判断两个对象相等时,他们的hashcode必须相等;
当两个对象的hashcode相等时,他们的equals比较却不一定相等。
这又是为什么呢?
Object类默认的equals比较规则就是比较两个对象的内存地址。而hashcode是本地方法,java的内存是安全的,因此无法根据散列码得到对象的内存地址,但实际上,hashcode是根据对象的内存地址经哈希算法得来的。
假如这两个对象都重写了其equals方法,并且其属性相等,equals比较之后会返回true;但是如果并没有重写hashcode的话,其返回的依然是两个对象的内存地址,那么他们的hashcode不相同,这便不符合逻辑。
所以说:
重写equals方法后再重写hashcode是有原因的:
①能提高比较的准确性与严谨性;如果重写了equals方法,而没有重写hashcode方法,会出现equals相等的对象,hashcode不相等的情况,重写hashcode方法就是为了避免这种情况的出现。
②能提高比较效率,使用hashcode方法提前校验,可以避免每一次比对都调用equals方法。
为什么重写equals还要重写hashCode
最新推荐文章于 2023-05-15 22:08:22 发布
