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

​​​​​​​

相关推荐
m0_748240254 分钟前
python轻量级框架-flask
开发语言·python·flask
论迹15 分钟前
【JavaEE】-- 多线程(初阶)2
java·开发语言·java-ee
桃子是唯一的水果24 分钟前
java 单例模式(Lazy Initialization)实现遍历文件夹下所有excel文件且返回其运行时间
java·单例模式·maven
+72026 分钟前
如何在java中用httpclient实现rpc post 请求
java·开发语言·rpc
ybq1951334543127 分钟前
javaEE-SpringBoot日志
java·spring boot·后端
火烧屁屁啦31 分钟前
【JavaEE进阶】图书管理系统 - 贰
java·spring
xzzd_jokelin31 分钟前
Spring AI 接入 DeepSeek:开启智能应用的新篇章
java·人工智能·spring·ai·大模型·rag·deepseek
学习两年半的Javaer34 分钟前
Rust语言基础知识详解【一】
开发语言·rust
PyAIGCMaster35 分钟前
50周学习go语言:第四周 函数与错误处理深度解析
开发语言·学习·golang
全栈开发圈36 分钟前
新书速览|Rust汽车电子开发实践
开发语言·rust·汽车