次のシナリオを検討してください。
String dude = "Harold";
//some stuff
dude = "Kumar";
「Kumar」という 2 番目の値が割り当てられるとdude
、「Harold」とは別のまったく新しいオブジェクトが出現します。私が疑問に思っているのは、「ハロルド」は明らかにもう使用されていないため、ガベージコレクションは即座に行われるのでしょうか、それとも後で JVM が適切であると判断したときに行われるのでしょうか?
アップデート:
が新しい値 (オブジェクト) に設定されたからといっdude
て、必ずしも古いオブジェクトへのすべての参照が削除されたわけではありません。dude
「Harold」の後、「Kumar」の前に別の参照が呼び出された場合、明らかに「Harold」オブジェクトが保持されます。
String dude = "Harold";
//some stuff
String interim = dude;
dude = "Kumar";
System.out.println("dude = " + dude);
System.out.println("interim = " + interim);
版画
dude = Kumar
interim = Harold
当初想定していた以上の考慮事項があるため、変更後に初期値が必ずしも範囲外である必要はありません。