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

相关推荐
Live&&learn4 分钟前
Vue项目打包后内联字符串不显示的原因
前端·javascript·vue.js
darkb1rd9 分钟前
OpenMythos:从零重构大模型架构实战指南
开源·github·好物分享
ejinxian35 分钟前
Rust的GUI方案中,Slint、Azul、egui、iced、Druid、Tauri
前端·javascript·vue.js
弑神风36 分钟前
GitHub Copilot vs Cursor深度横评(2026):谁是AI编程之王?
程序员·github·copilot·ai编程·cursor·工具测评
CoderJia程序员甲37 分钟前
GitHub 热榜项目 - 日榜(2026-04-25)
ai·大模型·llm·产品运营·github·ai教程
Python私教42 分钟前
ShadcnVueAdmin 的国际化是怎么实现的
前端·javascript·vue.js
㳺三才人子1 小时前
容器內的 H2 控制台
开发语言·前端·javascript
薛定谔的猫19822 小时前
gradio学习代码部分
java·前端·javascript
zh_xuan2 小时前
把Android Library 上传到github并在工程中引用该远程仓库
android·github·远程仓库
盖丽男2 小时前
使用 GitHub Actions 自动打包 Android APK
android·github