【Java】internメソッドの仕組みをまとめる【コンスタントプール】

【Java】internメソッドの仕組みをまとめる【コンスタントプール】

JavaStringクラスinternメソッドについて、その機能と使い方をまとめます。

internメソッドの機能と書式例

internメソッドはコンスタントプールの文字列を探します。コンスタントプールとは、重複する定数(特に文字列)を1か所にまとめて保持するメモリ領域のことです。

同じ文字列が存在すればその文字列を返し、同じ文字列が存在しない場合は新たに文字列を生成します。

文章だと分かりにくいので、下にあるサンプルコードで動きを理解しましょう。

メソッドの書式例は以下の通りです。

internメソッドの書式例
1// 文字列がコンスタントプールにあるか検索
2<文字列>.intern();

internメソッドの使用例

メソッドの使用例をサンプルコードで示します。

InternTest.java
 1public class InternTest {
 2  public static void main(String[] args) {
 3    String s1 = new String("123");
 4    String s2 = "123";
 5    String s3 = s1.intern();
 6    String s4 = s2.intern();
 7
 8    System.out.println("s1 == s2:" + (s1 == s2));
 9    System.out.println("s1 == s3:" + (s1 == s3));
10    System.out.println("s2 == s3:" + (s2 == s3));
11    System.out.println("s3 == s4:" + (s3 == s4));
12  }
13}

実行結果が以下になります。

出力結果
1s1 == s2:false
2s1 == s3:false
3s2 == s3:true
4s3 == s4:true

サンプルコードでは、s1new演算子によってインスタンス化されています。s2とは参照先が違うためs1 == s2falseとなります。

s3は「コンスタントプール内のs1と同じ文字列」を探しますが、s1はインスタンス化されているため見つけることが出来ず、新たに文字列を生成しています。よって参照先が異なるためs1 == s3falseとなります。

s2s3では、s3は「コンスタントプール内のs1と同じ文字列」を探しています。s2s1と同じ文字列が入っているため、s3に「s2と同じ参照先の文字列」を代入します。よってs2 == s3trueになります。

s3s4に関してもそれぞれ同じ文字列がs2に入っているため、どちらも「s2と同じ参照先の文字列」を代入します。よってs3 == s4trueになります。


今回はinternメソッドの紹介でした。以上で記事を終わりにします。

参考文献