JavaのString Poolとは何ですか?

JavaのString Poolという名前が示す通り、String PoolはJavaのヒープメモリに格納されたStringのプールです。私たちは、StringがJavaで特別なクラスであることを知っており、新しい演算子を使用したり、ダブルクォーテーションで値を提供したりすることで、Stringオブジェクトを作成することができます。

Javaの文字列プール

以下は、JavaのヒープスペースでString Poolが保持される方法と、異なる方法でStringを作成した場合に何が起こるかを明確に説明する図です。String Poolは、JavaにおいてStringが不変であり、Stringのインターニングの概念を実装しているため可能です。String Poolは、Flyweightデザインパターンの例でもあります。String Poolは、Javaランタイムのために多くのスペースを節約するのに役立ちますが、Stringの作成にはより多くの時間がかかります。Stringを作成するためにダブルクォーテーションを使用すると、まずString Pool内で同じ値を持つStringを検索し、見つかれば参照を返し、それ以外の場合は新しいStringを作成してから参照を返します。ただし、new演算子を使用すると、Stringクラスに新しいStringオブジェクトをヒープスペースに作成させることができます。intern()メソッドを使用してStringをプールに入れるか、同じ値を持つ別のStringオブジェクトをString Poolから参照することもできます。以下は、String Poolのイメージに関するJavaプログラムです。

package com.scdev.util;

public class StringPool {

    /**
     * Java String Pool example
     * @param args
     */
    public static void main(String[] args) {
        String s1 = "Cat";
        String s2 = "Cat";
        String s3 = new String("Cat");
        
        System.out.println("s1 == s2 :"+(s1==s2));
        System.out.println("s1 == s3 :"+(s1==s3));
    }

}

上記のプログラムの出力は次のとおりです。

s1 == s2 :true
s1 == s3 :false

おすすめ読み物:JavaのStringクラス

文字列プールで作成される文字列の数はいくつですか?

時々、Javaの面接でStringプールに関する質問をされることがあります。例えば、以下の文において、いくつの文字列が作成されるかといった質問です。

String str = new String("Cat");

上記の文において、1つまたは2つの文字列が作成されます。もし既に文字列リテラル”Cat”がプールに存在する場合、プール内には1つの文字列”str”が作成されます。もしプールに文字列リテラル”Cat”が存在しない場合、まずプール内に作成され、その後ヒープ領域に作成されるため、合計で2つの文字列オブジェクトが作成されます。読む: Java String インタビューの質問

コメントを残す 0

Your email address will not be published. Required fields are marked *