4

重複の可能性:
intern()
を使用する場合 String の intern メソッドを使用する必要があるのはいつですか?

Javaは文字列を自動的にインターンしますか? もしそうなら、なぜ文字列に明示的なインターンメソッドがあるのですか? 明示的な呼び出しが必要な特定の使用例はありますか?

4

3 に答える 3

1

Java は、実行時に作成された文字列を自動的にインターンしません。(コンパイル時に文字列定数に対してそうします)。

マップで表現されたレコードを受け取るコンポーネントで使用されるヒープの最大 30% を節約する特定のユース ケースがありました。各レコードのキーのセットは同一でしたが、受信した新しいレコードごとにキー文字列の新しいインスタンスが作成されました。キー文字列をインターンすることで、ヒープ消費が大幅に削減されました。

于 2012-05-05T13:47:20.460 に答える
0

JavaDoc から: 「すべてのリテラル文字列と文字列値の定数式はインターンされています。」

私の知る限り、実行時にインターンしてもパフォーマンス上の利点はありません。重複を含む動的に作成された文字列が多数ある場合は、ヒープスペースを確保できます。ただし、これにはたとえば独自のハッシュを使用する方が安全に思えます。

于 2012-05-05T13:46:20.940 に答える
0

文字列リテラルのみを自動的にインターンします。自分で文字列を作成した場合 (たとえば、ネットワークからの入力ストリームから)、インターンされません。同じ文字列のインスタンスが多数あると予想される場合は、ヒープに同等の文字列を多数持つよりも、それらをインターンする方が価値があるかもしれません。個人的には、一度も使ったことがありません。

于 2012-05-05T13:47:29.207 に答える