黑马程序员技术交流社区
标题:
关于String问题
[打印本页]
作者:
鲁中需
时间:
2012-10-23 21:41
标题:
关于String问题
本帖最后由 鲁中需 于 2012-10-25 21:57 编辑
String s = "hello";
s = s + "_world!"
这两句代码执行后,原始的String对象中的内容到底变了没有?为什么?
作者:
梁枝武
时间:
2012-10-23 21:57
本帖最后由 梁枝武 于 2012-10-23 21:58 编辑
String s = "hello"; 等效于:
char data[] = {'h','e','l','l','o',};
String s = new String(data);
这里的“+”是连接符,s = s + "_world!"后data = {'h','e','l','l','o','_','w','o','r','l','d','!'};
故最终s = "hello_world!"
作者:
陈琦
时间:
2012-10-23 22:00
String s = "hello"; 这句后栈内存中有一个 s ,指向堆内存中的一个字符串 "hello" 。
s + "_world!"; 这句执行时 ,先找到 s 引用的字符串"hello",然后和 "_world!"相加。
最后将 s 重新指向两者相加的值"hello_world“。
原先的 hello 和 world ,因为没有指向就自动被垃圾回收机制回收。
作者:
范贞亮
时间:
2012-10-24 15:48
String常量字符串, 'hello'本身是一个字符串 在字符串常量池中 , 这个里面的内容是不会被改变的 , 当s发现没有hello_world 这个字符串时 , 就会创建一个新的,并把它的引用赋给S 所以S中的引用是改变了,
作者:
高正新
时间:
2012-10-24 16:01
你说的涉及到内存了。
String类是被final修饰的,所以String里存放的内容是不能被改变的。
但是我们平时使用时却感觉是可以随时改变的。
这是因为当执行这段代码的时候,s = s + "_world!"
java会在方法区添加新的值,将 s 和 _world! 连接起来,然后再将s 指向这个区域。
但是原来的值是没有变的。
作者:
442851994
时间:
2012-10-24 16:29
没有变, String类是不可变的类,s指向的是一个String对象,然后下面s=s+"_world"对s进行了操作,但s所指向的String对象没有变。这时候s指向了另一个对象内容是“hello_world”,原来那个对象还在内存中并没有改变。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2