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

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

问为什么会出现上述结果?

答:先来回答str3为什么会等于str5吧:因为str5="a"+"b"。这种方式使得str5在编译期间已经被确认了,编译器会对已经确认的进行优化,相当于直接写str5="ab"。而str3中已经在常量池中创建过一个"ab"了,所以这里的str5在常量池中查找的时候找到了"ab",就直接把引用指向了这个已经存在的ab,所以两者相同。

        为什么str3不等于str4?str3不等于str4是因为str3这个引用指向的是字符串常量池中的"ab",而str4是两个字符串变量相加,而且这两个变量不是final类型,无法在编译期间进行确认,所以就没办法进行优化。只能靠加载时再进行确认,两个字符串相加是通过StringBuilder进行实现的。比如String z=x+y,整个的实现过程其实是 关于String类型的题目,string将两个字符串相加是如何实现的?

这种实现方式,会创建一个StringBuilder对象出来,然后添加一些字符串之后,再转换成String类型,并将这个拼接好的对象的引用给了z,实现了z=x+y的字符串拼接。所以str3中的引用和str5中的引用并不相同,返回false。

本文章参考自:https://bbs.csdn.net/topics/390725871