你真的懂了 == 与 equals() 与 hashCode() 的区别与联系了吗?

本文详细介绍了Java中==、equals()和hashCode()的区别与联系,强调了重写equals()时为何需同时重写hashCode()。内容涵盖了基本概念、面试常见问题解答以及实例演示,帮助读者深入理解这三个概念在Java编程和集合操作中的作用。
摘要由CSDN通过智能技术生成

前言

== 与 equals() 与 hashCode() 的区别与联系可以说是 Java 的经典和高频面试题了。
这个问题好像不难,但是如果没有好好了解一下,却是真的很容易被问住。
来个自测:
如果以下这些问题你都可以非常确定的回答出来,那这篇博客可以不用看了;反之,如果你对有些问题还不了解,或者模棱两可,那务必好好把这篇博客看完!

  1. == 与 equals() 的区别?
  2. 重写了 hashCode() 方法后,散列码(或者称为:哈希值)一样的两个对象一定相等吗?
  3. 如果没有重写 hashCode() 方法,散列码(哈希值)一样的两个对象相等吗?
  4. 为什么重写了 equals() 方法后,还要重写 hashCode() 方法? 如果不重写会出现什么问题?

下面首先将这3个单独介绍一下:

一、==

  1. 对于基本数据类型, == 比较的是值。
  2. 对于引用数据类型,== 比较的是内存地址。

二、equals()

  1. equals() 是 Object 类提供的方法,若未重写,底层相当于是一个 == 。

  2. 但一般是使用重写后的 equals() 的方法,用来比较的两个对象的属性值是否相同。

  3. Java 语言规范要求 equals 方法要满足以下五点:
    自反性: 对于任何非空引用 x ,x.equals(x) 应该返回 true 。
    对称性: 对于任何引用 x 和 y ,当且仅当 x.equals(y) 返回 true 时, y.equals(x) 返回 true 。
    传递性: 对于任何引用 x、y 和 z ,如果 x.equals(y) 返回 true , y.equals(z) 返回 true ,那么 x.equals(z) 也应该返回 true 。
    一致性: 如果 x 和 y 引用的对象没有发生变化,那么反复多次调用 x.equals(y) 应该返回同样的结果。
    对于任何非空引用 x , x.equals(null) 应该返回false。

  4. Java的内置类一般都已经重写了 equals 方法,比如 String 类。

  5. 重写一个 equals() 方法
    ① 检查是否是同一个对象的引用,如果是的话直接返回 true 。
    ② 检查是否是同一个类型,如果不是的话,直接返回 false 。
    ③ 将对象强制转换为相应类类型的变量。
    ④ 判断两个对象每个字段是否都相等,基本类型字段用 == 比较,对象字段用 equals 比较;如果所有字段都相等,返回 true ,否则返回 false 。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值