这个生成了多少个Java对象 - 新的String(“abcd”)

时间:2011-03-04 10:32:37

标签: java string object

String s = new String("abcd");

3 个答案:

答案 0 :(得分:9)

实习池中有一个字符串,每次运行代码时都会重复使用。

然后是每次运行该行时构造的额外字符串。例如:

for (int i = 0; i < 10; i++) {
    String s = new String("abcd");
}

最终会有11个字符串,其内容为“abcd” - 内存为1个,副本为10个。

答案 1 :(得分:2)

创建一个对象。 JVM将在幕后创建另一个对象,因为它interns由类加载时的常量创建的字符串,但这是一个JVM事物(没有要求它{{ 1}})。更重要的是,你可以相当肯定已经完成了:

intern

一次,然后

String s1 = new String("abcd");

只会创建一个对象。

JVM在类加载时创建另一个(第一个)String s2 = new String("abcd"); 对象:编译器将字符串放在String文件中的string constants area中。

}时,这些是read into the class's constant poolinterned

因此,当该行代码执行时,会创建一个.class。但是在类中包含该行的事实创建了两个:一个用于加载类时创建的常量,另一个用于该行代码。

答案 2 :(得分:-2)

您创建一个对象,即String =“abcd”。你只打电话给新人一次。