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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© b_boywindy 中级黑马   /  2012-2-28 11:44  /  1869 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

String str = "abc";
str = new String("hehe");
当执行到第一句代码时,内存中产生了一个字符串对象 "abc",并将其引用赋给str。
当执行到第二句代码时,内存中又产生了一个字符串对象 "hehe",并将其引用赋给了str。
所以改变的只是引用而已,而并没有改变字符串 "abc"的内容,内存中产生了两个字符串对象。

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

3 个回复

倒序浏览
当对象没有引用指向它时,垃圾回收机制就会把它回收的。
回复 使用道具 举报
用String str1 = "abc";就可以引用到了“abc”了,“abc”是个字符串常量,在编译期间存于常量池中,常量池中保存有基本和对象数据类型的常量,以及类、方法、变量的修饰符等。也就是说只有当.class文件不存在的时候“abc”才会消失。
而“hehe”在堆中,当没有引用指向他的时候,在不确定的时间里被垃圾回收机制回收。
回复 使用道具 举报
想打印“abc“的话,让str重新指向它就可以了即str=”abc“;system.out.println(str)。当没有引用指向“abc”的话,它会被垃圾回收机制回收;这一点就是java比C++好的地方。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马