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

JavaのStringクラスの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サンプルコードでは、s1はnew演算子によってインスタンス化されています。s2とは参照先が違うためs1 == s2はfalseとなります。
s3は「コンスタントプール内のs1と同じ文字列」を探しますが、s1はインスタンス化されているため見つけることが出来ず、新たに文字列を生成しています。よって参照先が異なるためs1 == s3はfalseとなります。
s2とs3では、s3は「コンスタントプール内のs1と同じ文字列」を探しています。s2にs1と同じ文字列が入っているため、s3に「s2と同じ参照先の文字列」を代入します。よってs2 == s3はtrueになります。
s3とs4に関してもそれぞれ同じ文字列がs2に入っているため、どちらも「s2と同じ参照先の文字列」を代入します。よってs3 == s4はtrueになります。
今回はinternメソッドの紹介でした。以上で記事を終わりにします。