この質問を理解しようとしていましたが、本の回答で解決できませんでした。誰かが私に説明することはできますか?質問は以下の通りです。メソッドの引数として渡され、nullに設定されているオブジェクトのガベージコレクション
class CardBoard {
Short story = 5;
CardBoard go(CardBoard cb) {
cb = null;
return cb;
}
public static void main(String[] args) {
CardBoard c1 = new CardBoard();
CardBoard c2 = new CardBoard();
CardBoard c3 = c1.go(c2);
c1 = null;
// do stuff
}
}
//は、ガベージコレクションの対象となりますどのように多くのオブジェクト、スタッフ達するないとき?
与えられた回答は2オブジェクトです。 1つのCardBoardオブジェクト(c1)のみが対象ですが、関連するショートラッパーオブジェクトもあります。
オブジェクトc1だけがガベージコレクションの対象となる理由を理解できません。
2つのオブジェクトが作成されます(c1とc2)。
オブジェクトc3の場合、c2をc1.go()メソッドに渡します。 nullに設定され、返されたオブジェクトはc3に割り当てられます。
メソッドc1.go()では、cbに渡すオブジェクト(c2に渡す同じオブジェクト)がnullに設定されます。 c2 refferingするオブジェクトをガベージコレクションの対象にすることはできませんか?
私は参照変数のコピーがc1.go(c2)に渡され、それが参照変数cbにコピーされることを理解します。これらの2つの参照変数は、ヒープ内の同じオブジェクトにpoitingされませんか? –
@AnjJo - はい、そうです。しかし 'cb = null'を実行すると、2番目の参照はもはや元のオブジェクトを指しません。 'null 'を指します。 – TheLostMind
' cb'の参照のみが 'null'に設定されています。しかし、インスタンス変数を変更しようとすると、両方の参照変数が同じオブジェクトを参照することになります。それはあなたが正しいと言うことですか? –