关于String类型的题目,string将两个字符串相加是如何实现的,面应该如何解释

关于String类型的题目,string将两个字符串相加是如何实现的?

对string相加以及变量相加,我借鉴几位大佬的经验

1.从代码的角度解释

在这里插入图片描述
问为什么会出现上述结果?

答:先来回答str3为什么会等于str5吧:因为str5=“a”+“b”。这种方式使得str5在编译期间已经被确认了,编译器会对已经确认的进行优化,相当于直接写str5="ab"。而str3中已经在常量池中创建过一个"ab"了,所以这里的str5在常量池中查找的时候找到了"ab",就直接把引用指向了这个已经存在的ab,所以两者相同
为什么str3不等于str4?str3不等于str4是因为str3这个引用指向的是字符串常量池中的"ab",而str4是两个字符串变量相加,而且这两个变量不是final类型,也不像是str5那样,无法在编译期间进行确认,所以就没办法进行优化。只能靠加载时再进行确认,两个字符串相加是通过StringBuilder进行实现的。比如String z=x+y,整个的实现过程其实是 这种实现方式,会创建一个StringBuilder对象出来,然后添加一些字符串之后,再转换成String类型,并将这个拼接好的对象的引用给了z,实现了z=x+y的字符串拼接。所以str3中的引用和str5中的引用并不相同,返回false。

本文章参考自:https://bbs.csdn.net/topics/390725871
2.从jvm内存的角度解释
这样解释的话
在这里插入图片描述
这里的先说明一个在字符串常量池
,一个堆内存重新开辟空间.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值