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

相关推荐
烤麻辣烫19 小时前
JS基础
开发语言·前端·javascript·学习
猫猫不是喵喵.21 小时前
layui表单项次大数据量导入并提交
前端·javascript·layui
起个名字总是说已存在21 小时前
github开源AI技能:Awesome DESIGN.md让页面设计无限可能
人工智能·开源·github
ShingingSky21 小时前
给 Claude Code 加上 Windows 提醒——一个小功能,少操十份心
人工智能·设计
Hello--_--World21 小时前
ES13:类私有属性和方法、顶层 await、at() 方法、Object.hasOwnProperty()、类静态块 相关知识点
开发语言·javascript·es13
comerzhang6551 天前
Web 性能的架构边界:跨线程信令通道的确定性分析
javascript·webassembly
zhensherlock1 天前
Protocol Launcher 系列:Overcast 一键订阅播客
前端·javascript·typescript·node.js·自动化·github·js
第一程序员1 天前
Python数据结构与算法:非科班转码者的学习指南
python·github
SUNNY_SHUN1 天前
清华团队提出TFA-Net,用模板特征聚合破解工业异常检测中的“捷径学习“难题
人工智能·学习·视觉检测·github
CeshirenTester1 天前
GitHub变了:私有仓库也要“喂AI”?开发者该怎么应对
人工智能·github