首页 > 其他 > 详细

equals(),==和hashcode()区别

时间:2020-03-07 14:24:40      阅读:55      评论:0      收藏:0      [点我收藏+]

一、==和equals()的区别

首先“==”是关系运算符,equals()是方法。但是同时他们的结果都返回布尔值;

“==”的比较

  • 基本类型,比较的是值
  • 引用类型,比较的是地址

equals()的比较

  • 用户自定义类如果重写了equals(),比较的是内容。
  • 用户自定义类如果没有覆盖equals(),将调用父类的equals (比如是Object),而Object的equals的比较是地址(return (this == obj);)
    我们进行字符串比较时直接调用equals()方法,是String重写过的。
    注意:Object类的==和equals比较的都是地址,作用相同

二、equals()和hashcode()的区别

equals()回顾

Equals()默认情况下不重写的时候调用的时object类的方法,比较的是对象的内存地址
重写的话比较的是具体内容

hashcode()比较

Hashcode()也可以比较两个对象是否一致,而且效率较高,但它有一个致命的缺点,并不是绝对的准确,例如:

  • object类中的hashcode()方法,由于每个对象的内存地址不一样,所产生的hash值也不同,比较准确
  • String类的hashcode(),根据字符串内容,只要字符串所在的堆空间相同,返回的hash值就相同。不准确。
  • Integer类,返回的hash值就是Integer对象里所包含的那个整数的值。Integer a=new Integer(100),Integer b=new Integer(100);返回的hash值一样。
    所以说hashcode()方法一般只在集合中使用。


Hashcode的实际使用场合
将对象放入到set集合中,首先要判断对象的hashcode值与集合中已有的任意一个元素是否相等,如果不相等直接放入到集合中,如何相等的话,再通过equals方法判断要放入的对象是否与集合中的任一对象相等,如果不相等,就放入到集合中。



小结:equals相等的两个对象他们的hashcode()值绝对相等,hashcode相等的两个对象他们的equals判断不一定相等。

equals(),==和hashcode()区别

原文:https://www.cnblogs.com/dearnotes/p/12269969.html

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