hashcode和equlas、==的一些区别

---------------------- android培训java培训、期待与您交流! ----------------------

分析:“==”“equals”“hashCode”
1.'=='是用来比较两个变量(基本类型和对象类型)的值是否相等的,如果两个变量是基本类型的,直接比较值。如果两个变量是对象类型的,比较的是这两个对象在栈中的引用(即地址)。'=='是对栈中的值进行比较的。如果要比较堆中对象的内容是否相同,那么就要重写equals方法了。 
2.在Object类中如果没有重写equals方法,equals和==也就相当于一样的。 
3.通常要重写equals方法,因为比较对象的内容比比较对象的引用(地址)要好理解更易懂。
4.在Object类中如果没有重写hashCode那么任何对象的hashCode都是不相等的。

5.通常在集合类的时候需要重写hashCode方法和equals方法,如果需要给集合类添加对象,在添加之前需要查看给集合里是否已经有了该对象,一般情况下用hashCode来比较。

6.当对象的基本数据类型值相同,那么hashCode就一定相同。

7.equals()相等的两个对象,hashcode()一般是相等的;equals()方法不相等的两个对象,hashcode()有可能相等。
8.hashcode()不等,一定能推出equals()也不等;hashcode()相等,equals()可能相等,也可能不等。因为在object类中hashcode()方法是返回的是对象的引用(地址值),equals()方法比较的也是两个对象的引用(地址值),如果equals()相等,说明两个对象地址值也相等,当然hashcode()也就相等了。 

9.hashCode就好比字典里每个字的索引,equals()好比比较的是字典里同一个字下的不同词语。就好像在字典里查“自”这个字下的两个词语“自己”、“自发”,如果用equals()判断查询的词语相等那么就是同一个词语,比如equals()比较的两个词语都是“自己”,那么此时hashCode()方法得到的值也肯定相等)
(hashcode()不等,一定能推出equals()也不等) 
---------------------- android培训java培训、期待与您交流! ----------------------
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
equals、hashCode和==是Java中用于比较对象的方法,它们在某种程度上是相关的但又有不同的作用。 ==运算符是用于比较两个对象是否完全相同,即比较对象的引用地址。如果两个对象的引用地址相同,则==运算符返回true;如果两个对象的引用地址不同,则==运算符返回false。需要注意的是,==不能用于比较对象的内容是否相等。 equals方法是用于比较两个对象的内容是否相等。默认情况下,equals方法和==运算符具有相同的行为,即比较对象的引用地址。但可以重写equals方法以实现自定义的对象相等性比较。在重写equals方法时,需要满足以下条件: 1. 对称性:若a.equals(b)返回true,则b.equals(a)也必须返回true。 2. 自反性:对于任何非null的引用值x,x.equals(x)都必须返回true。 3. 传递性:若a.equals(b)返回true,并且b.equals(c)返回true,则a.equals(c)也必须返回true。 4. 一致性:在多次调用equals方法时,对象的内容没有改变,则多次调用equals方法的结果应该保持一致。 hashCode方法返回对象的哈希码,可以理解为对象的唯一标识。hashCode方法的主要作用是在使用哈希表等基于哈希算法的数据结构时提高查找效率。需要注意的是,若两个对象的内容相等,它们的hashCode值应该相等。因此,当重写equals方法时,通常也需要重写hashCode方法,以保证对象相等时它们的hashCode值也相等。 需要实现类的这三个方法的情况一般有以下几种: 1. 想要比较两个对象的内容是否相等,需要重写equals方法,常常需要同时重写hashCode方法。 2. 自定义的类要作为Map的键或Set的元素,需要重写equals和hashCode方法,以保证对象的相等性判断正确。 3. 自定义的类需要实现深度拷贝或需要序列化/反序列化操作,需要重写clone方法,通常也需要重写equals和hashCode方法。 综上所述,equals、hashCode和==三者的关系是:==比较对象的引用地址,equals比较对象的内容是否相等,hashCode返回对象的哈希码,它们各自有不同的使用场景和目的。在某些需要用到对象比较的特定场景下,需要重写equals和hashCode方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值