String#substring
メソッドの実装を見てみると:
new String(offset + beginIndex, endIndex - beginIndex, value);
同じ元のコンテンツ(パラメータchar [] value )で新しい文字列が作成されていることがわかります。
したがって、回避策は new String(toto.substring(...))
、元のchar []値への参照を削除し、それをGCの対象にすることです(参照がこれ以上存在しない場合)。
この実装を説明する特別な理由があるかどうか知りたいです。メソッドが新しい短い文字列を自分で作成しないのはなぜですか?また、代わりに完全な元の値を保持するのはなぜですか?
他の関連する質問は:new String(...)
部分文字列を扱うときに常に使用する必要がありますか?