質問: null; //その他の処理を実行する } } A. 0 B. 1 C. 2 D.コンパイルに失敗する E.それを知る方法はない F.ランタイム例外が投げられる
回答: c1, c2, c3のうち、ガベージコレクトの対象になるのがc1のみというのは t-wataさんのおっしゃるとおりです。go()メソッドがガベージコレクトと 関係ないというのも、c3への代入でオブジェクトが構築されてない、という点も 正しいです。 ただこの問題のポイントは、 「いくつのCardBoardオブジェクトがガベージコレクトの対象になるか?」 ではなく、 「いくつのオブジェクトがガベージコレクトの対象になるか?」 という点みたいですね。すなわち、c1にnullが代入された時点で、 (正しくはc1に代入されていたオブジェクトがどこからも参照されなくなった時点で) c1からのみ参照されているc1.storyもガベージコレクトの対象に なってしまっています。(CardBoard.storyはプリミティブ型の short型ではなくラッパ型のShort型なので、オブジェクトとして扱われます。) クラス宣言部で Short story = 200; と代入されていますが、これは CardBoard のコンストラクタで Short story = new Short(200); と書かれているのと等価になります。すなわちShort型のオブジェクトが 構築されている。 よってc1とc1.storyがガベージコレクトの対象となり、 cの2個が正解となります。なかなか意地悪な問題ですね。