作者LPH66 (ha(ruhi|yate)ism)
看板java
标题Re: [问题] 请教一道GC题目
时间Tue Mar 13 12:28:42 2007
※ 引述《H45 (!H45)》之铭言:
: ※ 引述《LPH66 (ha(ruhi|yate)ism)》之铭言:
: : 我的想法是和原PO一样
: : 如果真的在第七行就能被GC的话
: : 那下面这段程式 (我多加两行)
: : public class GC
: : {
: : private Object o;
: ^^^^^^^^^^^^^^^^^
: 设这个Object叫作x
: : private void dosomethingElse(Object obj){o = obj ; }
: : public void dosomething() {
: : Object o = new Object() ;//第5行
: : dosomethingElse(o) ;//第6行
: : o = new Object() ;//第7行
: ^^^^^^^^^^^^^^^^^^
: 设这个Object叫作y
: : doanotherthing();
: : dosomethingElse(null) ;//第8行
: : o = null ;//第9行
: : }//第10行
: : private doanotherthing(){System.out.println(o);} //这里
: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
: 这边会印出x
: : }
: : 我标「这里」的地方到底会印出什麽? 是第五行的物件还是null?
: : 如果是第五行的物件的话
: : 那假如刚好在跑到这之前这物件就已经被GC掉了 那会发生什麽事?
: 所以第七行之後y被GC掉是没问题的
看来我需要搞懂一件事
x到底是个reference还是它是个物件?
如果x是个reference(我目前的观念) 那就会有我的问题
但如果x是个物件 那原来的答案就没问题
(因为此时o=obj;变成物件copy 这个o和那个o就无关了)
在C++里面的话 x是个物件
但这里是java 而我刚刚测试的结果是像这样宣告的成员是个reference
--
実琴:「
河野!你真的就这样被
物质慾望给吸引过去了吗?!」
亨:「只要
穿着女装摆出亲切的样子,所有必要花费就能
全免,似乎一点都不坏啊。」
実琴:「难道你没有
男人的尊严了吗?!」
亨:(断然道)「
没有。在
节衣缩食且
生活吃紧的
学生面前,
没有那种东西。」
--プリンセス・プリンセス 第二话
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 192.192.197.115