今回はStringクラスのinternメソッドについて、その機能と役割をまとめます。
このメソッドはJavaSilverSE11の黒本でも出題されているメソッドです。
internメソッドの機能と書式例
internメソッドはコンスタントプールの文字列を探し、同じ文字列が存在すればその文字列を返すメソッドです。同じ文字列が存在しない場合は新たに文字列を生成します。
文章だと分かりにくいので、下にあるサンプルコードで動きを理解しましょう。
メソッドの書式例は以下の通りです。
/*internメソッドの書式例*/ 文字列.intern() //文字列がコンスタントプールにあるか検索
internメソッドの使用例
メソッドの使用例をサンプルコードで示します。
サンプルコード
public class InternTest { public static void main(String[] args) { String s1 = new String("123"); String s2 = "123"; String s3 = s1.intern(); String s4 = s2.intern(); System.out.println(s1); System.out.println(s2); System.out.println(s3); System.out.println("s1 == s2:" + (s1 == s2)); System.out.println("s1 == s3:" + (s1 == s3)); System.out.println("s2 == s3:" + (s2 == s3)); System.out.println("s3 == s4:" + (s3 == s4)); } }
出力結果
サンプルコードの出力結果を以下に示します。
123 123 123 s1 == s2:false s1 == s3:false s2 == s3:true s3 == 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メソッドはコンスタントプール内に同じ文字列が存在すればその文字列を返す
- 同じ文字列が存在しなければ新しく文字列を生成する
文章だとどうしても理解しづらい部分があると思うので、実際にプログラムを組んでみると分かりやすいですね。
以上がinternメソッドの使い方の紹介になります。