Java基础 Object类回顾------" == " 、equals()、hashCode() 之间的关系

9 篇文章 0 订阅

在 Java 中 Object 类是所有类的父类,任何类都会默认继承 Object 类。

1. " == "

它的作用是判断两个对象的内存地址是否相等。如果地址相同则判为同一个对象。

1.1. 对于基本数据类型类型

基本数据类型 == 比较的是

1.2. 对于引用数据类型

引用数据类型 == 比较的是内存地址

 

2. equals()

2.1. 未重写

equals() 在 Object 类中的默认实现方法是调用 " == ",此时等价于使用 " == " 判断。

2.2. 重写了

但通常会重写这一个方法使之比较对象的内容是否相等,如 String 中就重写了 equals()方法,使之比较的是内容是否相同。

 

3. hashCode()

hashCode() 是一个native方法,用于获取对象的哈希码的,它返回的是一个int型整数。

hashCode() 保证在一次执行中同一个对象hashCode()是一样的

hashCode() 的哈希码主要作用是给散列表快速确定索引的,通过哈希码先判断对象是否有可能相同(因为相同的对象哈希码也一定相同),再去用 equals() 做进一步的比较,这样可以大大减少使用 equals()比较的次数

所以说如果两个对象相等,则其hashCode()的值也会相等。但由于 hashCode() 是根据内存地址生成的值,所以对于同一个类生成的两个对象,即使它们里面的值一样,但其哈希值是不会相等的,因此当我们重写 equals() 方法时最好也要重写 hashCode() 方法,这样才能保证相同内容的类对象 hashCode() 相等。

可以看到 String 类中就重写了 hashCode() 方法,通过一个特定的算法来确定其哈希码。

这样当我们将 String 作为 Key 存入哈希表时才可以准确定位到相同类对象的位置。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值