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

相关推荐
涵涵(互关)43 分钟前
GoView各项目文件中的相关语法2
前端·javascript·vue.js
子兮曰1 小时前
别让爬虫白嫖你的导航站了:纯免费,手把手实现加密字体防爬
前端·javascript·后端
我科绝伦(Huanhuan Zhou)1 小时前
探索技术世界:我的GitHub数据库工具宝库
数据库·github
昇腾CANN2 小时前
TileLang-Ascend 算子性能优化方法与实操
开发语言·javascript·性能优化·昇腾·cann
web打印社区2 小时前
2026最新Web静默打印解决方案,无插件无预览,完美替代Lodop
前端·javascript·vue.js·electron·pdf
SENKS_DIGITAL2 小时前
当科技遇见自然:百岁展厅里的温暖与生命力-森克思科技
科技·设计·艺术·展厅设计·展馆设计·展览设计·主题展览设计
蜡台3 小时前
H5使用Chrome 权限问题
前端·javascript·chrome
大貔貅喝啤酒3 小时前
接口测试_Postman(详细版)
javascript·测试工具·node.js·自动化·postman
带娃的IT创业者3 小时前
GitHub Stacked PRs:重塑现代软件开发的工作流革命
github·软件开发·工作流·代码审查·pull request·stacked prs
小小码农Come on3 小时前
QML访问子项内容
前端·javascript·html