0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Java Silver対策】Stringのintern()メソッドとは?「共有掲示板」の例えで解説🌱

0
Posted at

🟢 はじめに

Javaを学習していると、文字列の比較==equals() の違いにぶつかりますよね。

その中でひっそりと登場する intern() というメソッド。

これ、一体何をしているの…?」と疑問に思ったことはありませんか?

今回は、Javaの文字列管理の仕組みを「オフィスとメモ用紙」に例えて、intern() メソッドの正体を分かりやすく解説します!

🏢 登場人物:Javaオフィスとメモ用紙

まず、Javaの世界を一つの「オフィス」だと想像してみてください。

このオフィスには、紙を節約するための 「共有掲示板String Pool)」 があります。

" "ダブルクォーテーション)で作った文字列: 自動的にこの「共有掲示板」にメモとして貼り出され、みんなでシェア(使い回し)します。

new String() で作った文字列: 「私は自分専用の新しい紙が欲しい!」という強い意志なので、共有掲示板は無視して、わざわざ新しいメモ用紙を用意します。

これを踏まえて、以下のコードを見てみましょう!

💻 サンプルコード:メモ用紙の比較実験

public class StringInternExample {
    public static void main(String[] args) {
        // 1. 普通に作成(共有掲示板に「Hello」というメモが貼られる)
        String standardMemo = "Hello";

        // 2. newを使って作成(わざわざ自分専用の「Hello」メモを作る)
        String specialMemo = new String("Hello");

        // 3. intern()の登場!(共有掲示板に同じ文字がないか探しに行く)
        String internedMemo = specialMemo.intern();

        // さて、同じメモ用紙(実体)を見ているでしょうか?
        System.out.println("① standardMemo == specialMemo : " + (standardMemo == specialMemo)); 
        System.out.println("② standardMemo == internedMemo: " + (standardMemo == internedMemo)); 
    }
}

実行結果

① standardMemo == specialMemo : false

② standardMemo == internedMemo: true

🕵️‍♂️ なぜこの結果になるのか?(解説)

Java== は、「書いてある文字」ではなく「全く同じ1枚のメモ用紙実体を見ているか?」を判定します。

standardMemo == specialMemofalse な理由

standardMemo共有掲示板のエコなメモを見ていますが、specialMemonew を使って作った「自分専用のメモ」を見ています。

書いてある文字は同じ「Hello」でも、見ている紙そのものが違うので、結果は false(違うよ!)になります。

standardMemo == internedMemotrue な理由

ここで intern() の魔法がかかります!

intern() は、「自分の持っているメモの文字Helloと同じものが、共有掲示板にないかな〜?👀」と探しに行く機能を持っています。

  1. specialMemo自分専用のメモ)が intern() を実行する。

  2. 共有掲示板を探すと、standardMemo が貼った「Hello」のメモを発見!

  3. 「あ、あるじゃん!じゃあこっちの紙を見よう!」となり、internedMemo は共有掲示板のメモを見るように切り替わります。

結果として、standardMemointernedMemo は「全く同じ共有掲示板の1枚のメモ」を見るようになったため、true(同じだよ!)になるというわけです。

💡 まとめ

  • intern() メソッドを使うと、文字列の「共有掲示板String Pool)」に同じ文字がないか探しに行く。

  • 同じ文字があれば、新しく紙を作るのをやめて、掲示板のメモを使い回すようになる。

普段の開発で頻繁に使うメソッドではないと聞きますが、Javaが裏側でどうやってメモリ)を節約しているのかを知ると、プログラミングが楽しくなるかもしれません。

同じように「intern()メソッドの使い方がいまいち分からない😫」と悩んでいる人の参考になれば幸いです🙌

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?