この質問は、 Thinking in Java、第 2 版、109 ページのScope of Object の章に基づいており、 newを使用して Java オブジェクトを作成すると、スコープの終わりを通過してぶら下がると言われています。次の例を示します。
{
String s = new String("a string");
} /* end of scope */
それから、それは言います、
参照 sはスコープの最後で消えます。ただし、s が指していた String オブジェクトは、まだメモリを占有しています。このコードでは、オブジェクトへの唯一の参照が範囲外であるため、オブジェクトにアクセスする方法はありません。
したがって、正しく理解できれば、テキスト「a string」はまだメモリ内にありますが、最初の文字「a」のメモリ アドレスを持つポインタは存在しません。これはどういう意味ですか?
続けて、
new で作成されたオブジェクトは必要なだけ存続するため、Java では多数の C++ プログラミングの問題が簡単に解消されます。
なぜこれが有利になるのでしょうか?上記の例では、文字列データは引き続きメモリ内に存在し、アクセスする方法はありません (ポインターが範囲外になった後に破棄されたため)。これはリソースを消費するだけです。