equals hashcode

equals 出现在Object中,父类通过比较两个对象的地址来判断两个对象是否一致。

hashcode是直接返回对象在内存中的地址。

根据业务需求 我们可能需要重写equals 来判断两个对象是否是相同的。同时要修改hashcode的计算方法。

在用到跟hashmap、hashset hashtree相关的数据结构的时候

如果两个相同的key通过equals判断是相同的。那么取出的值应该也相同。

这时候 只重写equals 不重写hashcode是不行的

hashmap在计算数组的偏移量的时候,是根据hash(key) & node<k,v>[].length - 1计算的

hash(key)是根据hashcode计算的

所以equal 和hashcode 的关系必须满足

如果equal 结果一致。那hashcode的结果必须一致

则如果hashcode的结果不一致,那equals的结果一定不一致

如果equal结果不一致,那hashcode的结果可以一致。也可以不一致。

一般 重写hashcode 通过获得key的string 返回的hashcode来判断。

猜你喜欢

转载自www.cnblogs.com/tecnologycc/p/10178003.html