用語について聞いたことがありますか 「Javaの文字列プール?」 いいえの場合は、適切な場所に着陸しました。 Javaの文字列プールは、に格納されている文字列のプールです。 ヒープメモリ。もう少し深く掘り下げて、Java文字列プールのこの概念を詳しく理解しましょう。
この記事では、次のポイントについて説明します。
さぁ、始めよう!
まず、文字列オブジェクトがどの程度正確に作成されているかを理解しましょう。
文字列を作成する方法は?
JavaでStringオブジェクトを作成するには、次の2つの方法があります。
- new演算子を使用します。例えば、
String s1 = new String( 'Joey')
- 文字列リテラルまたは定数式を使用します。例えば、
文字列s1 = 'Joey'(文字列リテラル)または文字列s1 = 'Joe' + 'y'(文字列定数式)
さて、私が話しているこの文字列プールとは何ですか、そしてこれに関連するJavaでの文字列の作成はどのようになっていますか。散らかったものを減らしましょう!
Javaの文字列プールとは何ですか?
文字列プールは、Javaヒープのストレージ領域です。
すべてのように、文字列の割り当て オブジェクトの割り当て 、時間とメモリの両方の場合でコストのかかる問題であることがわかります。 JVMは、文字列リテラルを初期化するときにいくつかの手順を実行して、パフォーマンスを向上させ、メモリのオーバーヘッドを削減します。 JVMで作成されるStringオブジェクトの数を減らすために、Stringクラスは文字列のプールを保持します。
文字列リテラルが作成されるたびに、 JVM 最初に文字列リテラルプールをチェックします。文字列が文字列プールにすでに存在する場合、プールされたインスタンスへの参照が返されます。文字列がプールに存在しない場合、新しいStringオブジェクトが初期化され、プールに配置されます。
概念を理論的に学んだ後、単純なインスタンスを使用して、Javaで文字列プールがどのように機能するかを段階的に説明します。
文字列プールはJavaでどのように機能しますか?
次のような新しい文字列を作成する場合:
文字列s1 =“レイチェル”
JVMは、同じ値が文字列定数プールに存在するかどうかを自動的にチェックします。
- はいの場合、それは既存の値を占めます。
- いいえの場合、それ自体で新しい文字列を作成し、文字列プールに追加します。
この動作を停止する場合は、new演算子を使用して文字列を作成します。
String s1 = new String(“ Rachel”)
ここで、この文字列をに追加する場合は 、Javaは、次のようにネイティブintern()メソッドを呼び出すことができるintern()メソッドと呼ばれるメソッドを提供します。
S1。インターン()
ここで、例を通して文字列プールの実装と動作を示します。
しかしその前に、短いリマインダー!
==演算子を使用して2つのオブジェクトを比較している場合は、メモリ内のアドレスを比較します。
したがって、==を使用して文字列を比較し、同じオブジェクトであるかどうかを完全に確認します。
それでは、実装プロセスに移りましょう。
ランダムな文字列javaを生成します
Javaの文字列プール:フロー図
ここで何が起こるかを段階的に把握しましょう。
- クラスは次の場合にロードされます が呼び出されます。
- JVMは、プログラム内のすべての文字列リテラルを検索します
- まず、リテラル「Apple」を参照する変数s1を見つけて、メモリに作成します。
- 次に、リテラル「Apple」の参照が文字列定数プールメモリに配置されます。
- 次に、同じ文字列リテラル「Mango」を参照する別の変数s2を見つけます。
- 次に、リテラル「Apple」を参照する別の変数s3を見つけます。
- JVMが文字列リテラル「Apple」をすでに検出したので、変数s1とs3の両方が同じオブジェクト、つまり「Apple」を参照します。
文字列プール用のJavaプログラム
public class StringPoolExperiment {public static void main(String [] args){String s1 = 'Rachel' String s2 = 'Rachel' String s3 = new String( 'Rachel')String s4 = new String( 'Rachel')。intern( )System.out.println(s1 == s2)// true System.out.println(s1 == s3)// false System.out.println(s1 == s4)// true}}
出力:
本当
誤り
本当
上記の例では、3つの方法すべてで文字列の初期化の使用法を明確に確認できます。
String s1 = 'Rachel' String s2 = 'Rachel' String s3 = new String( 'Rachel')String s4 = new String( 'Rachel')。intern()
プログラムの内部動作は、おそらく今は明確になっているはずです。
これで、ブログの終わりに近づきました。ここで詳しく説明した内容が、知識ベースの拡大に役立つことを願っています。私たちはJavaの世界に飛び込み続けます。乞うご期待!
チェックしてください 25万人以上の満足した学習者のネットワークを持つ信頼できるオンライン学習会社であるEdurekaが世界中に広がっています。 EdurekaのJavaJ2EEおよびSOAトレーニングおよび認定コースは、Java開発者になりたい学生および専門家向けに設計されています。このコースは、Javaプログラミングをすぐに開始できるように設計されており、HibernateやHibernateなどのさまざまなJavaフレームワークに加えて、コアと高度なJavaの両方の概念についてトレーニングします。 春 。
質問がありますか?この「Javaの文字列プール」ブログのコメントセクションでそれについて言及してください。できるだけ早くご連絡いたします。