次のSCJP 模擬試験の質問では、学生は(0) とマークされた行のうち、ガベージ コレクションString b
の候補となる正確な行を見つけるように求められます。
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に保存されることを期待しないという結論に達しました。参照されていない場合、ガベージ コレクションの対象となります。
本当?はいの場合、リテラル プールメカニズムは参照なしで文字列をどのように扱いますか?
編集:質問は、コンパイラの最適化が行われていないことを前提としています。