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

相关推荐
HIT_Weston2 小时前
41、【Agent】【OpenCode】本地代理分析(五)
javascript·人工智能·opencode
前端Hardy2 小时前
前端必看!LocalStorage这么用,再也不踩坑(多框架通用,直接复制)
前端·javascript·面试
前端Hardy2 小时前
前端必看!前端路由守卫这么写,再也不担心权限混乱(Vue/React通用)
前端·javascript·面试
happyprince2 小时前
2026年04月07日热门github项目
github
奔跑草-2 小时前
【AI日报】每日AI最新消息2026-04-07
人工智能·大模型·github·开源软件
竹林8183 小时前
从ethers.js迁移到Viem:我在重构DeFi前端时踩过的那些坑
前端·javascript
CoovallyAIHub3 小时前
Sensors 2026 | 从无人机拍摄到跑道缺陷地图,机场巡检全流程自动化——Zadar机场全跑道验证
数据库·架构·github
CoovallyAIHub3 小时前
15K Star中文首发!$5部署一个会自我进化的私人Agent——NousResearch开源Hermes Agent
git·架构·github
前端郭德纲3 小时前
JavaScript Object.freeze() 详解
开发语言·javascript·ecmascript
希望永不加班3 小时前
SpringBoot 静态资源访问(图片/JS/CSS)配置详解
java·javascript·css·spring boot·后端