因为你如果添加了eq,那必定是希望去和其他的对象做内容的比较,或者看集合或者是数组中是否包含此对象,针对第一种情况,如果已经确定了比较的对象,那么在比较的时候不会有太大的问题,只是会违反java规范约定,但是如果是要看集合或者是数组中是否包含此对象,问题就出现了,比如集合的contains(obj),首先会计算obj的hashcode值,Object默认的hashcode值是地址值,如果在数组中不存在hashcode为该obj的地址值的话,那么就会视为找不到,即使找到内容大概率也不同,并且还有第三种情况,就是在将obj存储到数组中时,会先计算hashCode值,如果该对象不重写hashCode,那么每次生成的hashCode值都不一样,虽然减少了hash冲突,但是由于频繁的扩容反倒会导致插入的效率变低
为什么重写了equals必须要重写hashCode方法:
最新推荐文章于 2024-08-20 14:34:44 发布