这个生成了多少个Java对象 – 新的String(“abcd”)
String s = new String("abcd");
实习池中有一个字符串,每次运行代码时都会重复使用。
然后是每次运行该行时构造的额外字符串。 例如:
for (int i = 0; i < 10; i++) { String s = new String("abcd"); }
最终会有11个字符串,其内容为“abcd” - 内存为1个,副本为10个。
你正在创建一个对象。 JVM将在幕后创建另一个对象,因为它实现了类加载时由常量创建的字符串,但这是一个JVM事物( 你没有要求intern
)。 更重要的是,您可以相当确定已完成:
String s1 = new String("abcd");
一次,然后
String s2 = new String("abcd");
只会创建一个对象。
JVM在类load时创建另一个(第一个) String
对象:编译器将字符串放在.class
文件的字符串常量区域中。 这些被读入类的常量池并在加载类时被实现。
因此,当执行该行代码时,将创建一个String
。 但是在类中包含该行的事实创建了两个:一个用于加载类时创建的常量,另一个用于该行代码。
您创建一个对象,即String =“abcd”。 你只打电话给新一次。