== 和 equals 区别

== 和 equals 区别

在面试过程中经常会被问到的一个问题是:==和equals的区别是什么?

== 作用

  • 基本数据类型:比较值是否相等
  • 引用数据类型:判断引用是否指向堆内存的同一块地址

equals: Object类中的一个方法,用于判断两个变量是不是对同一个对象的引用 ,即堆中的内容是否相同;String类型对这个方法进行了重写,用于比较两个字符串内容是否相同

看下这个例子,

ini 复制代码
String queryType = "1";
String queryType = new String("1");

使用上述两种方式定义了一个字符串对象,当使用 == 判断queryType的值是否为"1",得到的结果是不同的,为什么会这样呢?

需要重复的一个事实是:== 在比较引用数据类型时,会判断对象的引用地址是否相同。

当比较String类对象时,一个问题是,对象的内容相同,也就是字符串的值相同,不代表对象相同,即指向同一个内存地址。

所以上方问题可以转换为实例化String两种方式,有什么区别?

ini 复制代码
String queryType = "1";
String queryType = new String ("1");
  • 存储位置不同:String queryType = "1" ,存储在常量存储区的字符常量池中;new String ("1"),存储在堆中。
  • 常量池中相同的字符串只有一个,但new String()每new一个对象就会在堆中新建一个对象,不管这个值是否相同。
  • 创建时间不同:String queryType = "1" ,编译阶段在内存中创建;String queryType = new String ("1"),运行阶段在堆中创建对象

回到上面的例子,

String queryType = "1"其实相当于执行了两步:

  • String a = "1";
  • String queryType = "a" ;

在比较过程中,实际上是比较 queryType 和 a 的值是否相等,相当queryType指向字符常量池中的 a ,所以 queryType = "1" 为true

new方式创建的话在堆上创建了两个对象 queryType 和 a,并不指向同一个地址,所以queryType == "1"为 false

综上,在实际开发中如果要比较字符串的值,首选equals()方法

参考资料

blog.csdn.net/weixin_4247...

zhuanlan.zhihu.com/p/618908438

相关推荐
卷无止境8 小时前
独立开发者的"富矿地带":哪些垂直领域值得你押注一辈子?
后端·python
狼爷8 小时前
从零用 Java 构建 AI Agent 框架:JavaManus 设计与实现深度解析
后端·langchain·aigc
郑州光合科技余经理8 小时前
海外版外卖加盟:总站与分站配送规则怎么分开管
java·开发语言·前端·后端·uni-app·php·ai编程
专业程序开发源9 小时前
springboot简历管理系统81389-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·spring·php·课程设计
专业程序开发源9 小时前
springboot社区养老系统44071-计算机课程设计、毕业设计
vue.js·spring boot·后端·python·django·php·课程设计
小呆呆6669 小时前
副业搞起来,小说,漫画,漫剧的成本优化思路
前端·后端·面试
周杰伦fans9 小时前
8GB显存下模型量化实战指南
人工智能·后端·c#
小蒜学长10 小时前
基于SpringBoot的佳新超市管理系统设计与实现系统(代码+数据库+LW)
java·数据库·spring boot·后端·佳新超市管理系统
IT_陈寒11 小时前
Vite静态资源导入这个坑我帮你们踩过了
前端·人工智能·后端
打工仔折腾 AI11 小时前
把AI Agent托管在家用电脑:UU远程终端与端口映射实测记录
人工智能·后端·python·langchain·ai agent 实战