生成された文字列リテラルを再利用するための保管場所です。
Javaでは、ダブルクォーテーションで文字を囲むと、Stringクラスのインスタンスが生成されます。
同じ文字列を生成するときに毎回インスタンスを生成するとメモリへの負荷が高くなるので、同じ文字列は使い回します。
例えば、
String s1 = "Hello";
String s2 = "Hello";
System.out.println(s1 == s2); // true
System.out.println(s1.equals(s2)); // true
の場合、変数s1とs2には同じインスタンスが格納されます。
このようにコンスタントプールは同じ文字列リテラルを使い回す目的で利用されます。
同じ値を持つ、2つの異なるインスタンスを生成したい場合は、以下のように書きます。
String s1 = new String("Hello");
String s2 = new String("Hello");
System.out.println(s1 == s2); // false
System.out.println(s1.equals(s2)); // true
intern()メソッド
コンスタントプールとメモリ領域を検索して、同じ文字列があれば、その参照を取得するメソッドです。
String s1 = "Hello";
System.out.println(s1.intern()); // Hello が出力される