注:本文的所有验证在文章最后
如果您愿意相信我的话,请静下心来,慢慢阅读,一定会解除您心中的些许疑惑
一、原生的hashCode与equals是什么样的
原生hashCode值为内存地址(未考正)
原生equals比较的是内存地址
二、什么时候重写equals?
答:比较两个实例是否相等时重写equals()。
equals()用于比较两个实例是否相等,两实例属性对应相等 => 两实例相等
只单纯比较两个同类型实例是否相等时只重写equals()就可以。作者觉得 "为什么重写equals()一定要重写hashCode”这种标题并不合理。
三、什么时候重写hashCode?
答:自定义类型作为HashMap的key
我相信还有其他情况需要重写hashCode,作者愚笨,暂时还不了解其他的情况,请谅解。
四、重写hashCode与equals的例子
自定义类型作为HashMap的key,没错,这也是重写hashCode的原因。
讲解如下:
1.HashMap不允许key重复的含义:
请先明确:即使您未重写hashCode与equals,自定义类型作为HashMap的key,从代码上是完全被允许的。
HashMap中不允许key重复指的是逻辑重复,下图中的这种逻辑是不被允许的,但这种逻辑是存在的(不重写hashCode和equ