在下面的SCJP 模拟考试问题中,要求学生找出String b
标记为 (0) 的那一行将成为垃圾收集的候选者。
public class Q76a9 {
static String f() {
String a = "hello";
String b = "bye"; // (0)
String c = b + "!"; // (1)
String d = b; // (2)
b = a; // (3)
d = a; // (4)
return c; // (5)
}
public static void main(String[] args) {
String msg = f();
System.out.println(msg); // (6)
}
}
在发现正确答案是 6 之后,我得出的结论是,如果存储在String Literal Pool中的String 对象丢失了它们的引用,则不要再将其保留在Pool中。如果未引用它们,则它们有资格进行垃圾收集。
真的吗?如果是,Literal Pool机制如何处理没有任何引用的字符串?
编辑:这个问题假设没有进行编译器优化。