【JavaSE】== 与equals equals()与hashcode()

1、== 与equals

“==”:作用是判断两个对象的地址是否相等。

  • 当用于基础数据类型(整型、浮点、布尔、char类型)的比较时,比较的是值;
  • 当用于引用数据类型(例如String)的比较时,比较的是内存地址。

equals:作用也是判断两个对象是否相等。

  • 当类没有覆盖equals方法时,等价于“==”比较两个对象;
  • 当类覆盖equals方法时,是判断两个对象的内容是否相等。

补充:
String中的equals方法是被重写过的,因此比较的是对象的值。

当创建String类型的对象时,虚拟机会现在常量池中查找又没有已经存在的值和要创建的对象值相同,有的话就将其赋给引用,没有的话就在常量池中重新创建一个String对象。

在这里插入图片描述

2、equals()与hashcode()

参考链接:Java hashCode() 和 equals()的若干问题解答

hashCode()的作用:确定该对象在哈希表中的索引位置。
(并不能唯一确定一个对象,不同对象的哈希值可能是不同的,但是哈希值相同,意味着映射在哈希表中的位置相同)

Q1:为什么equals方法被覆盖,hashCode方法也需要重写?
答:因为有相关规定:如果两个对象相等,那么hashcode也一定相同,且equals也返回true。

Q2:两个对象equals那么他们的hashcode相同吗?
答:相同。

Q3:两个对象hashcode相同,那么他们equals吗?
答:不一定。

首先以上两个问题的答案都必须建立在:两个方法都没有被重写。

规范:
1、hashCode和equals的返回值应该是稳定的,不应该具有随机性;(也就是说,比较多次的结果应该是一样的)
2、两对象返回true那么这两个对象的equals也应该返回true;
3、两对象equals则这两个对象的hashCode应该相等。

补充:
1、默认对象的hashCode方法返回值永远>=0;
2、默认对象的hashCode方法返回值不是对象的地址;
3、关于==,有些存在常量池里的对象有所不同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值