0

如果我跑,

String s1="abc";

那么有什么区别:

String s2=new String(s1);

String s2="abc";

这就是我感到困惑的地方:

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

4

3 回答 3

2

当您编写String s2="abc";并且"abc"已经在池中时,您将不会得到重复 - 您将获得对现有String.

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

于 2014-05-06T23:02:50.963 回答
2

在这种情况下,字符串常量池就出现了,如下面的屏幕截图所示。

我认为这将有助于您从视觉上理解它。

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

在此处输入图像描述

于 2014-05-06T23:05:33.280 回答
1

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

于 2014-05-06T23:04:08.457 回答