程序中如下语句,会在堆内存和字符串常量池中创建多少个对象?
我需要清晰地创建对象。我读过的许多资料都没有详细说明。当对象被销毁时,我很困惑。
String a="MAM"+"BCD"+"EFG"+"GFE";
将创建多少个对象?
我正在寻找有关对象、方法和类的生命周期以及 JVM 在动态更改和修改时如何处理它们的好资料。
最佳答案
"MAM"+"BCD"+"EFG"+"GFE"
是一个编译时常量表达式,它编译成 "MAMBCDEFGGFE"
字符串文字。 JVM在加载包含上述代码的类时,会根据这个字面量创建一个String
实例,并将这个String
放入字符串池中。因此 String a = "MAM"+"BCD"+"EFG"+"GFE";
不会创建任何对象,请参阅 JLS 15.18.1。字符串连接运算符 +
String 对象是新创建的(§12.5),除非表达式是编译时常量表达式(§15.28)。
它只是将对池中String
对象的引用分配给本地变量a
。
关于java - Java中的对象生命周期和内存管理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18096888/