Java SilverのStringクラスのコンスタントプール纏め

Java SilverのStringクラスのコンスタントプール纏め

Stringクラスのみコンスタントプールという仕組みがあるようで、同じ文字列なら、インスタンスを使いまわすという仕組みがあるようです。これをコンスタントプールと言います。

以下、同一性、同値性の確認例です。

public class Main {
public static void main(String[] args) {
String str1 = "aa";
String str2 = "aa"; // 使いまわすため同一インスタンスとなる
System.out.println(str1 == str2); // 同一のため、true
System.out.println(str1.equals(str2)); // 同値のため、true
}
}

view raw
equivalence
hosted with ❤ by GitHub

ただ、意図的にnewしてインスタンス生成すると別々のインスタンスとなるので、この辺引っかけ問題があります。

public class Main {
public static void main(String[] args) {
String str1 = "aa";
String str2 = new String("aa"); // newすると別インスタンスになる
System.out.println(str1 == str2); // 同一インスタンスではないため、false
System.out.println(str1.equals(str2)); // 同値のため、true
}
}

view raw
equivalence
hosted with ❤ by GitHub

  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA