[解決済み] java.lang.String.intern()を使用するのは良い習慣ですか?
2022-04-18 07:52:45
質問
に関するJavadoc
String.intern()
は、あまり詳しいことは書いていない。(一言で言えば これは文字列の正規表現を返すもので、内部で使われている文字列を
==
)
-
この関数はどのような場合に使用するのでしょうか?
String.equals()
? - Javadocに記載されていない副作用、つまりJITコンパイラによる最適化の多寡はありますか?
-
をさらに利用することはできますか?
String.intern()
?
解決方法は?
<ブロッククオートString.equals()の代わりにこの関数を使用するのはどのような場合でしょうか?
が必要なとき スピード 文字列を参照で比較できるため(==はequalsより高速です)
<ブロッククオートJavadocに記載されていない副作用があるのでしょうか?
主な欠点は、比較するすべての文字列を実際にintern()することを忘れないようにしなければならないことです。すべての文字列をintern()することを忘れると、混乱するほど不正確な結果を得ることになりがちです。また、みんなのために、文字列が内部化されていることに依存していることを明確に文書化しておいてください。
文字列を内部化する場合の2つ目の欠点は、intern()メソッドが比較的高価であることです。文字列がすでに内部化されている場合でも)一意の文字列のプールを管理する必要があるため、かなりの量の作業を行うことになります。ですから、例えば、入力された文字列のうち適切なものをすべてintern()するように、コード設計に気をつけるとよいでしょう。
(JGuruより)
第三の欠点(Java 7以下のみ):インターンされたStringはPermGen空間に存在し、それは通常非常に小さいです;ヒープに十分な空き領域があるのにOutOfMemoryErrorに遭遇することがあるかもしれません。
(Michael Borgwardtより)
関連
-
javax.net.ssl.SSLException: 読み取りエラー: ssl=0xdeae5100: システムコール中の I/O エラー、接続 res
-
[解決済み] JavaでArrayListではなくLinkedListを使用するのはいつですか?
-
[解決済み] serialVersionUIDとは何ですか、またなぜそれを使用する必要がありますか?
-
[解決済み] JavaScriptで二重引用符と単一引用符はいつ使うべきですか?
-
[解決済み] java.net.URLConnectionを使用してHTTPリクエストを発生させ処理する方法
-
[解決済み] どうすれば、文字列中のリテラルな中抜き文字を印刷し、また.formatを使用することができるのでしょうか?
-
[解決済み] なぜゲッターとセッター/アクセッサーを使うのですか?
-
[解決済み] Stringでswitch文が使えないのはなぜですか?
-
[解決済み] 静的メソッドを使用する場合
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
スタイルが読み込まれず、ブラウザコンソールでエラーが報告される。リソースはスタイルシートとして解釈されますが、MIMEタイプtext/htmlで転送されます。
-
ファインバグタイプ
-
java Mail send email smtp is not authenticated by TLS encryption solution.
-
スレッド "main" での例外 java.lang.ArrayIndexOutOfBoundsException: 1
-
自動配線された依存性のインジェクションに失敗しました。
-
spring aop アドバイスからの Null 戻り値が、サマリーのプリミティブ戻り値と一致しない。
-
Javaエラーメッセージがenclosingクラスでない
-
Eclipse起動エラー:javaは起動したが、終了コード=1を返した(ネット上の様々な落とし穴)
-
Error: java.lang.NoClassDefFoundError: クラス XXXX を初期化できませんでした
-
javax.net.ssl.SSLException: 読み取りエラー: ssl=0xdeae5100: システムコール中の I/O エラー、接続 res