3

次のように宣言された String が定数プールに保存されることを理解しています。

例えば。

String a = "test'; 

その後、テストはプールに保存されます

Webフォームから投稿されたリクエストパラメータなどのメソッドから取得した文字列なのか、ファイルから読み取った文字列なのか疑問に思います。例えば。

String name = request.getRequestParameter("name");

名前の値は定数プールに保存されますか? そうではないと思いますか?そうしないと、すぐにメモリ不足の perm gen エラーが発生するからですか?

誰でも私を啓発してもらえますか?

ありがとう

4

1 に答える 1

3

いいえ。文字列がいつどのように編集されるかは、ドキュメントとJLSセクション3.10.5internに記載されています。基本的に、リテラルおよび(その他の)文字列定数は自動インターンされますが、明示的に行わない限り、他に何も起こらない可能性があります。String#intern

副次的な点として、インターンされた文字列はガベージコレクションされないと想定しているようです。Javaのドキュメントには実際にそれを言っているものは何もありません。少なくとも1人の人が、彼のテストは実際にGCされていることを示しており、インターンプールが何らかの形の弱参照を使用していることを示唆しています。

于 2013-03-09T11:15:47.357 に答える