== 和 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 方法,实现对象值的比较(非引用),可以这样实现:

​​​​​​​

相关推荐
叶帆1 分钟前
【YFIOs】用C#开发硬件之WiFi网络
开发语言·网络·c#
meilindehuzi_a5 分钟前
深入理解 JavaScript 的同步与异步机制:从单线程设计到 Promise 核心应用
开发语言·javascript·ecmascript
小刘|9 分钟前
Spring WebFlux + AI 流式输出深度解析:Spring AI 与 LangChain4j 效果差异溯源
java·后端·spring
worilb10 分钟前
Spring Cloud 学习与实践(8):Spring Cloud Gateway 统一入口、路由转发与双重跨域故障演练
学习·spring·spring cloud
Arvin.Angela13 分钟前
Maven 的基本配置操作
java·maven
夕除15 分钟前
Spring Security 配置类(SecurityConfig)
java·后端·spring
lfwh16 分钟前
探针程序技术解析:基于 Spring Boot 非 Web 模式的云服务监控告警系统
前端·spring boot·后端
weixin1997010801618 分钟前
[特殊字符] 1688开放平台API Sign签名算法详解(Java / Python / PHP 实现)
java·python·算法
武子康22 分钟前
Java-22 深入浅出 MyBatis - 手写ORM框架3 手写SqlSession、Executor 工作原理
java·后端
未若君雅裁29 分钟前
JVM 垃圾回收算法与分代回收机制
java·jvm·算法