`
Xgeeeeek
  • 浏览: 21935 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

【原创】关于“hashCode相同,两对象不一定相等”的理解

    博客分类:
  • java
阅读更多

文章的解释都是在hashCode和equals方法没有被覆盖的情况,因为被覆盖后,谈论一定不一定就没意义了。

 

刚看到“hashCode相同,两对象不一定相等”这句话,有点不理解,hashcode代表的不就是跟对象在堆上的物理地址一样有唯一性么? 既然地址都一样了,对象还能是两个? 后来补习了下hashCode的知识。

hashCode 其实是使用了一种叫“杂凑”算法的方法算出来的一个int值,杂凑算法可以有多种表现形式(当然java使用的杂凑算法是java认为最有效率的杂凑算法),既然是算出来的,那么就是不准确的(接近准确但还是有误差),肯定会有一种情况,在某一时刻,多个对象传回相同的杂凑值,而且越糟糕的杂凑算法这种情况就越容易出现,所以就能够出现“hashCode相同,对象不一定相等”的情况;那么,反过来,“相等的对象,hashCode一定相同么?“,是的,两对象相等,hashCode 一定相同,why? 想想刚才的”杂凑算法“,应为是一种算法,所以,计算的方法肯定是不变的,所以,相等的对象,杂凑计算得出的hashCode一定相同。

 

刚接触hashCode,理解可能有误,望高手指教。眨眼

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics