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

相关推荐
糕冷小美n3 小时前
jeecgbootvue3列表数据状态为数字时,手动赋值的三种方法
前端·javascript·vue.js
小龙4 小时前
SSH 连接远程仓库并推送本地项目
git·ssh·github·远程仓库
Domain-zhuo5 小时前
CSS实现一个自定义的滚动条
前端·javascript·css·vue.js·git·node.js
张丹 新叶之扉6 小时前
vue的整理
前端·javascript·vue.js
清汤饺子6 小时前
饺子的 2024 年终总结(前端+生活篇)
前端·javascript·年终总结
程序员_三木7 小时前
用 vue3 实现新年快乐
前端·javascript·vue.js·webgl·three.js
??? Meggie7 小时前
【Python】selenium结合js模拟鼠标点击、拦截弹窗、鼠标悬停方法汇总(使用 execute_script 执行点击的方法)
javascript·python·selenium
鱼樱前端8 小时前
Vue3技术面提升之灵魂拷问(不懂得还是看看吧)
前端·javascript·vue.js
Tisfy8 小时前
Github - 如何提交一个带有“verified”标识的commit
git·ssh·github·ssh key·gpg
自然 醒8 小时前
如何实现el-select多选下拉框中嵌套复选框并加校验不为空功能呢?
前端·javascript·vue.js