常量池中的常量是否唯一?

常量池中的常量是否唯一?

s1="imooc";

s2="hello"+s1;

s3="hello"+s1;

s2==s3? 

请问此时s2和s3都是指向常量池中的”hello,imooc“么?

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

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

1回答
好帮手慕酷酷 2019-09-18 11:27:39

同学你好,常量池中的常量是唯一的,可以这样理解,

因为String对象是不可变的,所以使用“+”的修改其实是s2和s3变量在内存中会分别创建对象,但是都是指向常量池中的“hello imooc”常量。因为是两个不同的对象,所以在进行==比较地址时,是不同的,所以返回false。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 老师, 您这个解答让我产生了新的疑惑, 对字符串进行"+"操作会在内存中创建对象, 这个对象是怎样的对象? 是在堆里吗? 是不是相当于调用了 new String("hello"+str1) ?
    2020-01-31 16:39:24
  • 同学你好,因为String对象是不可变的,所以字符串进行"+"操作会在内存中创建一个新的对象,也就是相当于调用了 new String("hello"+str1) 。这个对象存放在堆中,并保存在常量池中。祝学习愉快!
    2020-01-31 18:55:20
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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