字符串问题

字符串问题

老师好,有个字符串问题不太明白,请解释一下~

String s1="Programming";

String s3="Program";

String s4="ming";

String s6=s3+s4;

为什么s1==s6为false?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小蓝 2023-03-05 16:07:45

同学你好,这是因为字符串的加法运算并不是简单的内容拼接。

字符串做加法操作时,底层会自动创建StringBuilder对象,然后调用方法进行拼接,拼接之后再调用toString方法转换回字符串。

所以即使内容相同,原字符串s1和拼接生成的s6指向的内存地址完全不同。

这也是为什么String进行对比时,不建议使用“==”而是需要使用“equals”的原因。

祝学习愉快~

  • 提问者 何艾莉 #1

    老师,我还有个疑问——

    String s2=new String("Programming");

    s2==s2.intern();//false

    这是为什么呢?

    2023-03-06 10:15:28
  • 好帮手慕小尤 回复 提问者 何艾莉 #2

    同学你好,1、intern()方法如果字符串s2在字符串常量池中存在对应字面量,则intern()方法返回该字面量的地址。如果不存在,则创建一个对应的字面量,并返回该字面量的地址。

    2、对于String对象s2而言,它是一个指向堆空间String对象的引用,但又会指向了字符串常量池中“Programming”这个字面量。在调用s2.intern(),返回的是字符串常量池中"字符串"字面量的地址。但s2本身存的是堆空间String对象的地址,所以二者不相等。

    祝学习愉快!

    2023-03-06 10:58:21
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星

相似问题

登录后可查看更多问答,登录/注册

请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师