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

相关推荐
m0_502724951 分钟前
腾讯地图tlbs-multi-marker动态更新marker图标
前端·javascript·vue.js·地图
记忆张量MemTensor1 分钟前
AI 数据迁移指南|Claude 靠提示词搬家,MindDock 一键完整备份记忆
人工智能·python·开源·github·浏览器
MIXLLRED13 分钟前
创建 GitHub 私人仓库并上传本地项目的完整步骤
ubuntu·github
小龙报19 分钟前
【Coze-AI智能体平台】解锁 Coze 工作流:逻辑控制・数据处理・AIGC 多媒体全场景实战
人工智能·深度学习·机器学习·语言模型·自然语言处理·github·aigc
Alan Lu Pop20 分钟前
React 表单提交关键词意外触发刷新
前端·javascript·react.js
掘金安东尼22 分钟前
企业级Claw落地避坑指南:70%项目失败的真实原因
前端·面试·github
我命由我1234523 分钟前
React - 创建 React 项目、React 项目结构、React 简单案例、TodoList 案例
前端·javascript·react.js·前端框架·ecmascript·html5·js
SuperEugene25 分钟前
Vue3 Pinia 状态管理规范:何时用 Pinia 何时用本地状态|状态管理与路由规范篇
开发语言·前端·javascript·vue.js·前端框架
Moment26 分钟前
TypeScript 要换芯了,6.0 竟是旧编译器的最后一舞
前端·javascript·github
lpfasd12328 分钟前
2026年第12周GitHub趋势周报:Claude生态爆发,AI工程化加速,开发者工具链重构
人工智能·重构·github