老师好,有个字符串问题不太明白,请解释一下~
String s1="Programming";
String s3="Program";
String s4="ming";
String s6=s3+s4;
为什么s1==s6为false?
登陆购买课程后可参与讨论,去登陆吧
同学你好,这是因为字符串的加法运算并不是简单的内容拼接。
字符串做加法操作时,底层会自动创建StringBuilder对象,然后调用方法进行拼接,拼接之后再调用toString方法转换回字符串。
所以即使内容相同,原字符串s1和拼接生成的s6指向的内存地址完全不同。
这也是为什么String进行对比时,不建议使用“==”而是需要使用“equals”的原因。
祝学习愉快~
老师,我还有个疑问——
String s2=new String("Programming");
s2==s2.intern();//false
这是为什么呢?
同学你好,1、intern()方法如果字符串s2在字符串常量池中存在对应字面量,则intern()方法返回该字面量的地址。如果不存在,则创建一个对应的字面量,并返回该字面量的地址。
2、对于String对象s2而言,它是一个指向堆空间String对象的引用,但又会指向了字符串常量池中“Programming”这个字面量。在调用s2.intern(),返回的是字符串常量池中"字符串"字面量的地址。但s2本身存的是堆空间String对象的地址,所以二者不相等。
祝学习愉快!
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
登录后可查看更多问答,登录/注册
综合就业常年第一,编程排行常年霸榜,北上广深月薪过万! 不需要基础,无需脱产即可学习,只要你有梦想,想高薪! 全新升级:技术栈升级(包含VUE3.0,ES6,Git)+项目升级(前后端联调与功能升级)
79 1
56 1
9 1
14 1
56 9
在线咨询
领取优惠
免费试听
领取大纲
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星