黑马程序员技术交流社区

标题: String之 内存问题 [打印本页]

作者: b_boywindy    时间: 2012-2-28 11:44
标题: String之 内存问题
String str = "abc";
str = new String("hehe");
当执行到第一句代码时,内存中产生了一个字符串对象 "abc",并将其引用赋给str。
当执行到第二句代码时,内存中又产生了一个字符串对象 "hehe",并将其引用赋给了str。
所以改变的只是引用而已,而并没有改变字符串 "abc"的内容,内存中产生了两个字符串对象。

那请问怎么打印出字符串"abc"呢?  难道不能打印了吗 ?  那岂不是占据了内存,或者说拜拜浪费了吗?

作者: 王睿    时间: 2012-2-28 17:14
当对象没有引用指向它时,垃圾回收机制就会把它回收的。
作者: hhubao2011_98    时间: 2012-2-29 12:24
用String str1 = "abc";就可以引用到了“abc”了,“abc”是个字符串常量,在编译期间存于常量池中,常量池中保存有基本和对象数据类型的常量,以及类、方法、变量的修饰符等。也就是说只有当.class文件不存在的时候“abc”才会消失。
而“hehe”在堆中,当没有引用指向他的时候,在不确定的时间里被垃圾回收机制回收。
作者: 冯兵兵    时间: 2012-2-29 12:50
想打印“abc“的话,让str重新指向它就可以了即str=”abc“;system.out.println(str)。当没有引用指向“abc”的话,它会被垃圾回收机制回收;这一点就是java比C++好的地方。




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