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

相关推荐
optimistic_chen1 分钟前
【Vue入门】组件及组件化
前端·javascript·vue.js·html·组件
下雨打伞干嘛25 分钟前
手写Promise
开发语言·前端·javascript
还是大剑师兰特33 分钟前
50个 filter相关的公共函数
开发语言·javascript·ecmascript
SuperEugene44 分钟前
前端基础实战:JS/TS与Vue体系化扫盲(47 篇完整目录 + 避坑)
javascript·vue.js·前端框架·npm·ecmascript·状态模式
兆子龙1 小时前
深入探究 React 史上最大安全漏洞
前端·javascript
兆子龙1 小时前
React useTransition:让 UI 更新更丝滑的并发特性
java·javascript
狐571 小时前
2026-03-15-因服务器网络访问问题从 GitHub 平滑迁移至 Gitee 等国内平台的方法
服务器·gitee·github
摸鱼的春哥1 小时前
Agent🤖记忆的提取与压缩!再也不担心我的Agent记忆混乱了
前端·javascript·后端
草梅友仁8 小时前
墨梅博客 1.9.0 发布与 LeanCloud 停服应对 | 2026 年第 11 周草梅周报
开源·github·ai编程
喵叔哟9 小时前
9. 【Blazor全栈开发实战指南】--Blazor调用JavaScript
开发语言·javascript·udp