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

相关推荐
_院长大人_8 分钟前
构建一个 Vue 基于el-input的磨损区间选择器组件 —— WearRangeSelector
前端·javascript·vue.js
遗憾随她而去.8 分钟前
前端 Vue 虚拟列表(Virtual List),从原理到实战
前端·javascript·vue.js
司南-704910 分钟前
开发自己的app之 - 如何构建自己github的release仓库
electron·github·web app
竹林81817 分钟前
从零集成RainbowKit:我如何解决多链钱包连接中的“幽灵网络”问题
前端·javascript
痴心阿文25 分钟前
npx create-next-app@latest从Vue迁移的最佳实践
开发语言·前端·javascript
四千岁27 分钟前
极简 WSL2 教程:开发、部署大模型必备
前端·javascript
WebGISer_白茶乌龙桃28 分钟前
基于 Cesium 的 GLB 建筑模型分层分房间点击拾取技术实现
前端·javascript·vue.js·webgl·cesium
0xCode 小新35 分钟前
Git常用操作
git·gitee·github
紫_龙37 分钟前
最新版vue3+TypeScript开发入门到实战教程之路由详解二
前端·javascript·typescript
嵌入式小能手43 分钟前
飞凌嵌入式ElfBoard-环境变量之添加修改环境变量setenv
服务器·前端·javascript