String的不可变性

String的不可变性

http://img1.sycdn.imooc.com/climg//597029de0001415f13660768.jpg请问:注释中的“所谓的修改其实是创建了新的对象,所指向的内存空间不变”是不是有错误,应该说“所谓的修改其实是创建了新的对象,所指向的内存空间发生了改变”?谢谢

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

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

1回答
好帮手慕珊 2017-07-20 14:14:34

这句话可以这么理解:

String s=new String("Hello World!");

s.subString(0,5);

当执行到s.subString(0,5);这条语句时,s的值并没有改变,它所指向的对象也没有发生变化。只是生成了一个新的常量。

这块说创建了一个新的对象可能不是特别准确,确切的说是一个常量。祝学习愉快!

  • 提问者 木子雨 #1
    谢谢老师的回答,您举的这个例子我能理解。 请问如何理解下面两句代码?s1最初指向的是在常量池中的"imooc“,后来执行第二条语句后,s1指向了变量池所产生的新常量"hello,imooc",那么请问,s1的内存空间有无变化是怎么理解的?谢谢 String s1="imooc"; s1="hello,"+s1;
    2017-07-20 14:24:55
  • 好帮手慕珊 回复 提问者 木子雨 #2
    因为赋值产生的变化。如果只写"hello"+s1;则s1是没有变化的,但后来又把结果赋值给了s1,重新赋值了,所以s1才发生了变化。
    2017-07-20 14:48:04
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

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