具有相同String值的两个不同变量被称为相同的存储器地址

时间:2015-03-09 15:06:46

标签: java string jvm

我知道字符串是不可变的。但我对下面的代码有疑问:

class StringTest {
   String s1 = "Joe";
   String s2 = "Joe";
   System.out.println(s1 == s2);
}

== 检查两者是否都被引用到相同的内存地址(如果我没有错)。如果是这样,即使两个字符串也被分配给两个不同的变量,为什么输出表示两者都被称为相同的存储器地址。

1 个答案:

答案 0 :(得分:1)

Java使用intern pool来提高性能,因此这两个变量引用相同的String。您可以使用new来获取新的内容,例如

class StringTest {
    public static void main(String[] args) {
        String s1 = "Joe";
        String s2 = new String("Joe");
        System.out.println(s1 == s2);
    }
}