黑马程序员技术交流社区

标题: new对象和它的"指向变量"问题 [打印本页]

作者: 赵俊杰    时间: 2012-8-8 12:03
标题: new对象和它的"指向变量"问题
本帖最后由 赵俊杰 于 2012-8-8 12:12 编辑

请问,如果:
BufferedReader br=null;
而后又让:
br=new BufferedReader(new FileReader("d:/test-one.txt");
br=new BufferedReader(new FileReader("d:/test-two.txt");
br=new BufferedReader(new FileReader("d:/test-three.txt");
那么之前两次创建的BufferedReader和FileReader对象是不是会因为失去各自的“指向变量”而被当垃圾回收掉?它们还在内存中吗?

作者: 张君    时间: 2012-8-8 12:27
{:soso_e100:}我也是新手啊,看了一点视频。
个人认为br 在栈内存中。
这个new BufferedReader(new FileReader("d:/test-two.txt");在堆内存。
当br指针指向br=new BufferedReader(new FileReader("d:/test-three.txt");
前面两个
new BufferedReader(new FileReader("d:/test-one.txt");
new BufferedReader(new FileReader("d:/test-two.txt");
的地址就不指向br了,所以会被java当做垃圾自行处理掉吧。

作者: 杨震    时间: 2012-8-8 12:47
前两个对象会被垃圾回收器收回的,因为前两个对象已经没有了引用,就无法访问了,没有用了。
垃圾回收器会在堆紧张的时候回收没有引用的对象
作者: 王少岩    时间: 2012-8-8 17:32
本帖最后由 王少岩 于 2012-8-8 17:34 编辑

我认为是这样
BufferedReader br=null;
//在栈内存中开辟空间存放变量br,br为null没有指向任何对象
br=new BufferedReader(new FileReader("d:/test-one.txt");
//在堆内存中开辟空间存放new BufferedReader(new FileReader("d:/test-one.txt")和new FileReader("d:/test-one.txt"),br指向new BufferedReader(new FileReader("d:/test-one.txt")
br=new BufferedReader(new FileReader("d:/test-two.txt");
//在堆内存中开辟空间存放new BufferedReader(new FileReader("d:/test-two.txt")和new FileReader("d:/test-two.txt"),切断之前的br的指向,br指向new BufferedReader(new FileReader("d:/test-two.txt")
br=new BufferedReader(new FileReader("d:/test-three.txt");
//在堆内存中开辟空间存放new BufferedReader(new FileReader("d:/test-three.txt")和new FileReader("d:/test-three.txt"),切断之前的br的指向,br指向new BufferedReader(new FileReader("d:/test-three.txt")
//前两次创建的对象切断了与br的联系,不会在被用到,将会被垃圾回收器回收。

我也是新手,互相学习哈




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