首页 > 其他 > 详细

equals和hashcode的区别

时间:2020-02-07 21:36:32      阅读:70      评论:0      收藏:0      [点我收藏+]

     equals和hashcode是java.lang.Object类的两个重要的方法,hashCode()方法和equal()方法的作用其实一样,在java中都是用来对比两个对象是否相等一致,

 那么equal()既然已经能实现对比的功能了,为什么还要hashCode()呢?

       因为重写的equal()方法里需要比较的,比较全面比较复杂,这样效率就比较低,而利用hashCode()进行对比,则只要生成一个hash值进行比较就可以了,效率很高,

那么hashCode()既然效率这么高为什么还要equal()呢?

       因为hashCode()并不是完全可靠,有时候不同的对象他们生成的hashcode也会一样(与hashcode算法有关),所以hashCode()只能说是大部分时候可靠,并不是绝对可靠,所以我们可以得出:

         1.equal()相等的两个对象他们的hashCode()肯定相等,也就是用equal()对比是绝对可靠的。

         2.hashCode()相等的两个对象他们的equal()不一定相等,也就是hashCode()不是绝对可靠的。

  总的来说,Object类默认的equals比较规则就是比较两个对象的内存地址。而hashcode是本地方法,java的内存是安全的,因此无法根据散列码得到对象的内存地址,但实际上,hashcode是根据对象的内存地址经哈希算法得来的,所以无法保证两个对象的内存地址是否一致。所以如果要重写equal()方法,就必须需要也重写hashcode()方法。

  总结:equal()准确但是效率低,hashcode()效率高但不准确。

       

equals和hashcode的区别

原文:https://www.cnblogs.com/yangzhixue/p/12274661.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!