一篇代码教你如何区分String的"=="和"equals()"

我们都知道String 类型存的是地址,用 "==" 进行判断的话,如果地址不一样,即使两个数的值是一样的,输出的结果也为false 。所以我们通常使用equals方法进行比较。

但是我的这一行代码却发现了一个"bug",我定义了s3和s4 两个变量,进行 "==" 比较的时候结果竟然为true?

ini 复制代码
String s3 = "hello";
String s4 = "hello";

System.out.println(s3 == s4);//结果为true
System.out.println(s3.equals(s4));//结果也为true

给大家看一下正常情况 (s1-s2)

ini 复制代码
String s1 = new String("hey");
String s2 = new String("hey");

System.out.println(s1 == s2);//结果为false
System.out.println(s1.equals(s2));//结果为true

对比一下。

大家看图上,想必能明显看到这两个结果也稍显不同。从图上来了解:s3和s4

该类型属于常量串直接赋值,它使用了*==*比较地址,两者的区别就在于:

s1和s2是new String赋值

常量串直接赋值导致地址直接进入了常量池中

new String赋值并没有进入常量池,两者对比起来应该是这样

所以才出现了System.out.println(s3 == s4);结果也为true的情况。

相关推荐
小智社群12 小时前
贝壳获取小区的名称
开发语言·前端·javascript
Jessica_Lee12 小时前
Openclaw智能体终止机制
javascript
米丘12 小时前
Connect 深度解析:Node.js 中间件框架的基石
javascript·http·node.js
饺子不吃醋12 小时前
执行上下文:变量提升、作用域与 this 底层机制
javascript
汉堡大王952712 小时前
为了搞懂 Promise 源码,我重写了 MiniPromise
前端·javascript
臧玉波12 小时前
一文读懂 JS 原型链
javascript
Hilaku13 小时前
OpenClaw 跟病毒的区别是什么?
前端·javascript·人工智能
OPHKVPS14 小时前
WebRAT恶意软件借GitHub伪造漏洞利用程序传播
网络·安全·github
逛逛GitHub14 小时前
这个开源 skill 专门炼化你的离职同事。
github
小龙报14 小时前
【Coze-AI智能体平台】Coze OpenAPI 开发手册:鉴权、接口调用与 SDK 实践
javascript·人工智能·python·深度学习·microsoft·文心一言·开源软件