在普通内存和字符串池中创建新字符串

时间:2014-09-21 06:19:12

标签: java string string-pool

例如:

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

然后,

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

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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