栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java中String字符串拼接比较是否相同

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java中String字符串拼接比较是否相同

==是比较用的是不是同一个地址里的内容并且比较两个内容是否相等

String拼接有两种占内存的形式:

1.常量拼接:

String a = "a";

String b ="bc";

String c ="a"+"bc";

String d="abc";

因为是常量,所以会在java常量池中存放一个a和一个bc,在拼接的时候因为没有abc字符串,但常量池中有a,bc会直接将已有的a和bc拼接起来也放在常量池中。再给d赋值abc时常量池已经有直接用就行。用==比较c和d因为用的都是常量池里的abc所以返回的结果是true。

2.变量拼接

String A=new String("a");

String B=new String("bc");

String c=A+B;

String d=new String("abc")

 A是个对象会在栈中开辟一块空间,使用new String会在堆中开辟一块空间。B和c、d都会同样开辟出不同的新的空间,对象实例在栈中开辟空间、new String在堆中开辟空间,但里面的字符串a和bc会存放在常量池中,栈中的A、B、c、d会有堆中new开辟出那块空间的地址指向堆中的数据,而对象A想用a这个字符串就会在它的堆中指向常量池中a的地址,放在常量池的目的是:别的对象想调用a时就不用再开辟新的空间从而造成内存空间的浪费。其他对象也是同样的方法存放字符串。

jvm内存图如下:

 c=A+B就是用变量拼接,只要有一个变量就是变量拼接,拼接的原理是StringBuilder,也就是在堆中新开辟出一个一个空间放已经拼接好的abc而不是放常量池中,所以用==比较c和d的值时c的abc是在堆中的而d的abc是在常量池中的所以返回的的结果是false。

String e=c.intern();

如果用了以上方法再比较e==d返回的结果就是true了,因为会吧堆中的内容abc放入常量池中。 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/439419.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号