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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵俊杰 山林野马   /  2012-8-8 12:03  /  1367 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 赵俊杰 于 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对象是不是会因为失去各自的“指向变量”而被当垃圾回收掉?它们还在内存中吗?

评分

参与人数 1技术分 +1 收起 理由
杨志 + 1 加油!

查看全部评分

3 个回复

正序浏览
本帖最后由 王少岩 于 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的联系,不会在被用到,将会被垃圾回收器回收。

我也是新手,互相学习哈
回复 使用道具 举报
前两个对象会被垃圾回收器收回的,因为前两个对象已经没有了引用,就无法访问了,没有用了。
垃圾回收器会在堆紧张的时候回收没有引用的对象
回复 使用道具 举报
{: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当做垃圾自行处理掉吧。

评分

参与人数 2技术分 +1 黑马币 +3 收起 理由
杨志 + 1
赵俊杰 + 3 嗯。回答的挺清晰,您也加油。.

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马