String s = new String("abcd");
答案 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中。
因此,当该行代码执行时,会创建一个.class
。但是在类中包含该行的事实创建了两个:一个用于加载类时创建的常量,另一个用于该行代码。
答案 2 :(得分:-2)
您创建一个对象,即String =“abcd”。你只打电话给新人一次。