== 和 equals 有什么区别?

1、典型回答

== 用于基础数据类型时,是用来比较两个变量的值是否相等的,而对于引用类型来说,是用来比较两个对象的引用是否相同的。而 equals 默认是比较两个对象的引用是否相同的,但大部分时候都会被重写为比较两个对象的值是否相同。

例如,对于 Object 来说,== 和 equals 都是一样的,都是用来对比两个对象的引用是否相同的,而 String 或 Integer 等类中,又重写 equals 让其变成了比较值是否相同(而非引用是否相同)

所以,我们通常会使用 == 来对比两个对象的引用是否相同,而使用 equals 对比两个值是否相同(前提条件是重写了 equals 方法)

2、全面剖析

对于 Object 方法,equals 方法底层实现就是"==",如下源码所示:

所以,对于 Object 对象来说,equals 和 == 都是一样的,都是比较对象的引用是否相同

但是 Integer 中的 equals 实现源码如下:

从上述源码可以看出,Integer 中会先将 Integer 对象转换成基础类型 int 值来进行比较,所以此时就不再是对比两个对象的引用了,而是对比两个对象的值是否相等

String 中的 equals 实现源码如下:

从 String 中的 equals 中可以看出,它和 Integer 一样,是将 Object 中的引用比较重写成了值比较了

3、知识扩展

如何实现自定义 equals 方法?

如果是我们的业务类中想要重写 equals 方法,实现对象值的比较(非引用),可以这样实现:

​​​​​​​

相关推荐
panxianren4 小时前
Bun 1.4 的 bun test --parallel 将 4 秒的测试套件缩短到约 1 秒
java·javascript
“AI国潮设计-小江”5 小时前
《Python+SDXL实战:用ControlNet精准控制“英歌舞翻糖吐司”构图,附批量生成脚本》
开发语言·人工智能·python·prompt·aigc
程序喵大人5 小时前
【C++入门】编译链接模型 - 01 一个 C++ 程序是怎样变成可执行文件的
开发语言·c++·编译链接模型
sunshine22 girl5 小时前
Java学习七 Java 项目实战2-注册业务
java·学习
萧瑟余晖5 小时前
Spring Boot 核心理念与快速上手
spring boot
省钱兄--zs6 小时前
北京24小时自助健身房系统软件开发实战:从架构设计到部署指南
java·数据仓库·spring boot·小程序·需求分析
youdexiang6 小时前
Android录音软件时间关键词检索功能分析
java·人工智能
sunshine22 girl7 小时前
Java学习七 Java 项目实战1-项目创建和主页面搭建
java·开发语言·学习
code2cat7 小时前
Java进阶篇之AtomicStampedReference:引用回到原值,版本戳仍能记住变化
java·cas·并发编程·aba
菜鸟~noob2337 小时前
【电子战】第三季预告—波武器与电子系统强力毁伤
开发语言·数据库·matlab·电子战