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

相关推荐
前端康师傅37 分钟前
JavaScript 变量详解
前端·javascript
Sun_light38 分钟前
队列:先进先出的线性数据结构及其应用
前端·javascript·算法
萌萌哒草头将军1 小时前
⚓️ Oxlint 1.0 版本发布,比 ESLint 快50 到 100 倍!🚀🚀🚀
前端·javascript·vue.js
karshey1 小时前
【Element Plus】Menu组件:url访问页面时高亮对应菜单栏
前端·javascript·vue.js
Mintopia2 小时前
Three.js 自定义几何体:解锁 3D 世界的创造力
前端·javascript·three.js
Mintopia2 小时前
计算机图形学碰撞检测:数字世界的 “防碰瓷” 秘籍
前端·javascript·计算机图形学
梓羽玩Python2 小时前
3B小模型吊打72B巨头!轻量级文档解析OCR,性能超Gemini,高效且精准!
github
梓羽玩Python2 小时前
轻量级语音模型Vui开源,支持本地部署,笑声停顿全拟真,4万小时练出人类对话感!
github
Hilaku2 小时前
我用 Cursor 写了两个月代码,项目代码量不降反升,为什么?
前端·javascript·架构