質問: null; } } } -------------------- create calling null objectlife.execmain$objectlife@1b90b39 という実行結果になりました。 「objectlife.execmain$objectlife@1b90b39」 がnullにならないのはどうしてなのでしょう? また this=null; で自分自身のインスタンスをnullにしようとおもったのですが コンパイルはとおるのですが実行してもなにもおきていないようです。 これはどのように解釈すればよいのでしょうか? 以上よろしくお願いいたします。
回答: objectlife obj = new objectlife(); objectlife obj2 = obj; 1行目は new で作られたオブジェクトの「参照アドレス」 を obj という変数に格納しているわけですよね。 そして、2行目で obj2 に obj に格納されている「参照 アドレス」の値をコピーして渡している。 、、、と考えれば良いのではないでしょうか。 要するに、 obj2 → obj → 「new」で作られたオブジェクトの参照 という直列の関係ではなくて、 obj → 「new」で作られたオブジェクトの参照 obj2 → という並列関係で捉えれば分かり易いかもしれません。 ですから、obj に null を代入したところで obj2 が 持っているオブジェクトの参照値が変わる訳では無い、、 という事では無いでしょうか。 そして、この後で obj2 にも null を代入したとしても 直ぐにオブジェクト自体が無くなるというわけじゃなくて、 ガベージコレクションの候補として登録され、vm が ガベージコレクションを起動させたときに始めてそこで オブジェクトが破棄されるという流れだと思います。 >this=null; で自分自身のインスタンスをnullにしよう >とおもったのですが、コンパイルはとおるのですが実行 >してもなにもおきていないようです。 あれ?私のコンパイラではコンパイル通りませんでしたよ。 「final 変数 this に値を代入する事はできません」