Hello,各位小伙伴们!今天是圣诞节,再此给大伙送上波祝福——圣诞快乐呀!今早起床的时候,脑海里突然冒出了一个超级无敌、无敌超级基础的问题——“重写equals()的时候就一定要重写hashCode()吗?”,说实话,我不确定!只记得当年背“八股文”的时候,就是重写equals()的同时一定要重写hashCode(),那到底是不是非要重写呢?两者是什么关系呢?如果不重写,会出现什么呢?
一、认识equals()和hashCode()
equals()和hashCode()都是Object类里面的方法,在java中所有的类都默认继承Object,如果子类没有重写equals()和hashCode(),那么将使用Object里面提供的方法,下面来看一下源码:
当然,以上只是作者的建议,至于是否采纳他的意见,还是要看在座的各位!!!
二、不重写hashCode()行不行?
我懒,我不想重写hashCode()行不行?如果需要根据内容去比较的话,我甚至连equals()都不想重写了。我劝你最好还是花点时间重写一下这两个方法,因为在日常工作中,大部分情况都是根据内容去比较两个对象是否相等的,而不是根据地址值!不管你是用注解还是自动生成这两个方法,我还是建议重写一下比较好,虽然绝大多数情况下,我们是不需要使用这个hashCode()去判断数据是否相等的,但是在日常的开发过程中,还是很难避免会或多或少会根据hash值去判断的,像常见的集合类:Set、Map底层就是根据hash值和equals()搭配使用的
三、小结
equals()和hashCode()方法最好还是顺带重写一下,这样会避免很多隐形的坑。hashCode()你可以不使用它,但最好还是重写一下! 毕竟这也是官方比较推荐的做法