一篇代码教你如何区分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的情况。

相关推荐
_风满楼10 分钟前
HTTP 请求的五种传参方式
前端·javascript·后端
光影少年22 分钟前
前端线上屏幕出现卡顿如何排查?
开发语言·前端·javascript·学习·前端框架·node.js
像我这样帅的人丶你还30 分钟前
前端监控体系与实践:从错误上报到内存与 GC 观测
前端·javascript·架构
a1117761 小时前
高斯泼溅 (Gaussian Splatting) 的 Three.js 实现
开发语言·javascript·ecmascript
用户79457223954131 小时前
一句话生成短视频:当 AI Skills 真正打通"创作流水线"
人工智能·github·ai编程
代码北人生1 小时前
agent时代,我们都低估了这个 23k Star 的 Claude Code Skills 项目!
javascript
成都渲染101云渲染66661 小时前
云渲染全面支持3dsMax 2027,高效渲染体验升级
开发语言·前端·javascript
zs宝来了1 小时前
微前端架构:qiankun 沙箱隔离与样式冲突
前端·javascript·框架
甄心爱学习1 小时前
【项目实训】法律文书智能摘要系统4
python·github·个人开发
M ? A1 小时前
Vue 的 scoped 样式穿透 React 不支持?用 VuReact 编译就行
前端·javascript·vue.js·react.js·面试·开源·vureact