アプリ版:「スタンプのみでお礼する」機能のリリースについて

あるテキストにガーベジコレクションに関する次のような問題があります。 
12. X3 x2 = new X3();
13. X3 x3 = new X3();
14. X3 x5 = x3;
15. x3 = x2;
16. X3 x4 = x3;
17. x2 = null;
18. // コードを挿入する
オブジェクトをガーベジコレクションの対象にするには、18行目にどの1行を挿入しますか(2つを選択)。
A. x3 = null;
B. x4 = null;
C. x5 = null;
D. x3 = x4;
E. x5 = x4;
答えは、C とE になっていますが、どうしてそうなるのかどなたか分かりやすく教えていただけませんか。

A 回答 (3件)

どこのテキストかわかりませんが問題が悪いですね。

答えも変です。

CとEだと13で作られたインスタンスはガーベッジコレクトの対象になりますが12で作られたインスタンスは対象にならないです。
しかも13で作られたインスタンスをガーベッジコレクトの対象にするだけならCかEのどちらか一方だけで十分です。

この回答への補足

回答ありがとうございました。 おっしゃるとおりです。

補足日時:2007/07/29 14:52
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。

お礼日時:2007/07/29 18:10

必要なのは一行です。


その一行は2通り書けるということです。
2行実行して、2つのインスタンス全部ガベージしろと云っているわけではありません。
全部ガベージするには、3つの変数全部参照外しをしないといけないので3行必要です。
    • good
    • 0
この回答へのお礼

よくわかりました。 ご回答ありがとうございました。

お礼日時:2007/07/29 23:36

12. X3 x2 = new X3();// instance A


13. X3 x3 = new X3();// instance B
14. X3 x5 = x3;// instance B
15. x3 = x2;// instance A
16. X3 x4 = x3;// instance A
17. x2 = null;
>オブジェクトをガーベジコレクションの対象にするには、18行目にどの1行を
問題文はこのとおりだったのか少し疑問ではあるけど、
まずはこの文章で、どちらか一方のインスタンスへの参照がすべて無くなればいいと言うことは解りますか?
一文で参照を外すことが出来るのは、一個ですよね?ということは、一変数からしか参照されていないものを変更すれば、参照が無くなってガベージの対象となります。

この回答への補足

17行目まで実行したときinstanceA を指している参照変数はx4 とx3 でinnstanceB を指している参照変数はx5 になっていると思います。
したがって、innstanceB は答えEによってガーベジコレクションの対象になります。引き続き、instanceA は答えAによってガーベジコレクションの対象になります。 従って答えはAとEになるのでしょうか。 

補足日時:2007/07/29 14:19
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!