Javaマスターへの道 資格勉強編 Part18
みなさんお久しぶりです!
最近のとんでもない暑さで体力が削られブログを休んでいた入社して早くも2ヶ月経ってしまった新人です(笑)
今日はこの暑さにも少し慣れてきたので、ここから毎日投稿目指して再び頑張っていこうと思います。
さて今日のテーマは資格勉強です。
最近めちゃくちゃ多いですが、ネタがないのでお許しください(笑)
ではさっそく今日のプログラムはこちらです。
問題です、以下のプログラムを実行するとcountの値はいくつでしょうか。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | public class Main { public static void main(String[] args) { String a = "123"; String b = new String(a); int count = 0; if (a.intern() == "123") { count++; } if (b.intern() == "123") { count++; } if (a.intern() == b.intern()) { count++; } System.out.println(count); } } |
以下選択肢です
A 1
B 2
C 3
D コンパイルエラー
さて皆さん答えは出ましたでしょうか、解答編いきますよ
では解答です
今回のプログラムではintern()というメソッドがありますね
このメソッドはメモリ上のコンスタントプールと呼ばれる場所にある文字列を探して、
再利用するためのメソッドです。
通常String は参照型なので、変数を作るときはnewでインスタンス生成をしなければならないのですが、
すべての文字列で毎回やっているとメモリが足りなくなってしまうかもしれないですし、
同じ文字列の場合メモリがもったいないですよね。
そこで同じ文字列の場合参照先を同じにすることでメモリを節約することができます。
なので今回の場合は上記すべてのif文で同じ内容を単純に比較しているので、
すべてtrueとなり答えとしてはCの3となります。
今回はコンスタントプールを学びましたがメモリの保存は結構複雑なのでそれもまたいつかやりたいと思っています。
では今回はこの辺で終わりたいと思います。
次回をお楽しみに