1

例如:

String str1 = “abc”;
String str2 = new String(“def”);

然后,

案例1String str3 = str1.concat(str2)会进入堆还是池?

案例2String str4 = str2.concat(“HI”)会进入堆还是池?

4

2 回答 2

0

在 java 中,你使用 new 关键字创建的任何字符串都将在堆内存中创建。如果您在不使用 new 的情况下创建任何字符串,它将在字符串池中创建,并将被称为字符串常量。字符串常量池值只有一个副本,这意味着字符串池中不会有重复项。

于 2014-10-13T17:56:15.470 回答
0

在第一种语法(String str1 = "abc";)中,只创建了一个 String 对象和一个指向它的引用变量。该对象是在 JVM 维护的 String 常量池中创建的。在第二种情况下String str2 = new String("def");,创建了两个 String 对象。由于调用了 new,因此在普通内存中创建了一个 String 对象。此外,字符串常量“newstring”将被放入字符串常量池中。

因此,当我们没有 New Keyword 时,我们只需在 String 常量池中创建一个 String 对象。

于 2014-10-29T23:22:14.490 回答