いいえ。理由は、オブジェクトをnullにしないためです。あなたが言うときあなたは以前にオブジェクトへの参照を保持している変数obj = null;
に置くだけです。null
同じオブジェクトへの他の参照がおそらくたくさんあります。
あなたがやりたいのは、オブジェクトを無効にしてガベージコレクションにすることだと思いますが、この決定はクラス内で行います。これが問題である場合は、弱参照を調べることをお勧めします。
他の可能な解決策は、Javaで一種の「スマートリファレンス」を実装することです。SmartReference
オブジェクトへの実際の参照を保持するクラスを作成できます。オブジェクトは、このスマート参照へのコールバックを保持しinvalidate()
、構文的に間違った式のようなメソッドを呼び出す必要がありますthis = null
。そのようなオブジェクトを直接参照するのではなく、スマートリファレンスを介してのみ参照するように注意する必要があります。
唯一の質問は「なぜあなたはこれをしたいのですか?」です。実際、これによりコードがより複雑で不安定になります。想像してみてください。オブジェクトはそれ自体を無効にすることを決定したので、「スマート参照」が保持している参照はになりnull
ます。これで、このスマート参照のすべての所有者は、オブジェクトを使用しようとしたときにNPEを取得します。これがまさにそのようなメカニズムがJavaに存在せず、アプリケーションプログラマーがメモリを直接管理できない理由です。
結論:すべてのオブジェクト参照を削除し、GCにその難しい仕事をさせます。信頼してください。ごみをきれいにすることを知っています。