java String的不变性

时间:2014-05-06 23:01:35

标签: java string immutability string-pool

如果我跑,

String s1="abc";

然后是否有任何区别:

String s2=new String(s1);

String s2="abc";

这是我对此感到困惑的事情:

Head First Java说:"如果字符串池中的String已经具有相同的值,则JVM不会创建重复,它只是将您的引用变量引用到现有条目。 "在我看来,s1已经创建了" abc",s2只是引用它。我是对的吗?

3 个答案:

答案 0 :(得分:2)

当您在池中已经写String s2="abc";"abc"时,您将不会获得重复内容 - 您将获得对现有String的引用。

但是如果你写new String(something),你会得到一个新的String,不管池中是否有匹配的String

答案 1 :(得分:2)

String Constant Pool在这种情况下出现,如下面的屏幕截图所示。

我认为它会帮助您直观地理解它。

String s1="abc"; // s1 will go to String constant pool

String s2=new String(s1); // any object created by "new" keyword will go to Heap

String s2="abc"; // s1 and s2 both will refer to same string in constant pool

enter image description here

答案 2 :(得分:1)

new关键字将强制在堆中创建一个新的字符串对象,即使它已存在于字符串池