黑马程序员技术交流社区

标题: 关于String的问题 [打印本页]

作者: 明天,你好    时间: 2013-5-10 19:54
标题: 关于String的问题
本帖最后由 刘胜寒 于 2013-5-14 12:18 编辑

今天老师讲了String str="ghufju";一旦定义之后str里面的内容便不会再改变
若是出现str=str.substring(3);这个不是变了吗?
作者: 黑马-雷钊    时间: 2013-5-10 20:03
同学,我是小雷。。这个问题得意思就是说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的原来的字符串去哪了?


作者: 任江峰    时间: 2013-5-10 20:08
String str="ghufju";一旦定义之后内存里面的"ghufju"对象不会改变了。
str=str.substring(3);是重新创建一个对象,并把str变量的引用指向这个新对象。
这里str变量的引用变化了,原来的"ghufju"字符串对象还在内存里,它没有变化。
作者: 黑马-雷钊    时间: 2013-5-10 20:13
任江峰 发表于 2013-5-10 20:08
String str="ghufju";一旦定义之后内存里面的"ghufju"对象不会改变了。
str=str.substring(3);是重新创建一 ...

哥们,,不错啊  。挺专业啊
作者: 任江峰    时间: 2013-5-10 20:16
黑马-雷钊 发表于 2013-5-10 20:13
哥们,,不错啊  。挺专业啊

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

好吧,小雷同学你厉害
作者: Leejuen    时间: 2013-5-10 21:03
是这样的string的源地址值存放的还是ghufju而str=str.substring(3);是new了个新地址赋值,原内存的string没变
作者: rosv    时间: 2013-5-10 21:34
String str="ghufju";一旦定义之后str里面的内容便不会再改变,这句话没错,是内容,也就是值不会改变,没有保证str的地址不可以改变
若是出现str=str.substring(3);会用str指向新的地址,"ghufju"失去了引用,成了垃圾。。。
作者: 、__WSD吴少东    时间: 2013-5-11 00:30
总之一句话,改变的只是引用。最后那字符串是不是会当垃圾处理掉,这个就不知道了,有人能回答下不?




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2