A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 明天,你好 中级黑马   /  2013-5-10 19:54  /  1589 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘胜寒 于 2013-5-14 12:18 编辑

今天老师讲了String str="ghufju";一旦定义之后str里面的内容便不会再改变
若是出现str=str.substring(3);这个不是变了吗?

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

10 个回复

倒序浏览
同学,我是小雷。。这个问题得意思就是说String str="ghufju"中的str是个对象。而你用方法str=str.substring(3)获取的就不是原来的str了。原来的str还在。只不过把你截取的ju两个字符重新返还给了str而已。就像
String S1 = new String("shfjkahfua");
String S2 = S1.subString(3);
s1=s2;
你说S1的原来的字符串去哪了?

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报
String str="ghufju";一旦定义之后内存里面的"ghufju"对象不会改变了。
str=str.substring(3);是重新创建一个对象,并把str变量的引用指向这个新对象。
这里str变量的引用变化了,原来的"ghufju"字符串对象还在内存里,它没有变化。

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报
任江峰 发表于 2013-5-10 20:08
String str="ghufju";一旦定义之后内存里面的"ghufju"对象不会改变了。
str=str.substring(3);是重新创建一 ...

哥们,,不错啊  。挺专业啊
回复 使用道具 举报
黑马-雷钊 发表于 2013-5-10 20:13
哥们,,不错啊  。挺专业啊

哈哈。谢谢鼓励。一起加油!
回复 使用道具 举报
明白了,原来指向str的指针指向了新的内存地址,原来的没有改变
谢谢几位的解答
回复 使用道具 举报
如果问题已解决,请及时修改分类,否则继续提问,谢谢合作!
回复 使用道具 举报
黑马-雷钊 发表于 2013-5-10 20:03
同学,我是小雷。。这个问题得意思就是说String str="ghufju"中的str是个对象。而你用方法str=str.substrin ...

好吧,小雷同学你厉害
回复 使用道具 举报
是这样的string的源地址值存放的还是ghufju而str=str.substring(3);是new了个新地址赋值,原内存的string没变
回复 使用道具 举报
rosv 中级黑马 2013-5-10 21:34:48
10#
String str="ghufju";一旦定义之后str里面的内容便不会再改变,这句话没错,是内容,也就是值不会改变,没有保证str的地址不可以改变
若是出现str=str.substring(3);会用str指向新的地址,"ghufju"失去了引用,成了垃圾。。。
回复 使用道具 举报
总之一句话,改变的只是引用。最后那字符串是不是会当垃圾处理掉,这个就不知道了,有人能回答下不?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马