JavaのStringクラス
のinternメソッド
について、その機能と使い方をまとめます。
internメソッド
はコンスタントプールの文字列を探します。コンスタントプールとは、重複する定数(特に文字列)を1か所にまとめて保持するメモリ領域のことです。
同じ文字列が存在すればその文字列を返し、同じ文字列が存在しない場合は新たに文字列を生成します。
文章だと分かりにくいので、下にあるサンプルコードで動きを理解しましょう。
メソッドの書式例は以下の通りです。
1// 文字列がコンスタントプールにあるか検索
2<文字列>.intern();
メソッドの使用例をサンプルコードで示します。
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メソッド
の紹介でした。以上で記事を終わりにします。