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

コメント

タイトルとURLをコピーしました