考虑以下场景:
String dude = "Harold";
//some stuff
dude = "Kumar";
一旦dude
被赋予其第二个值“Kumar”,一个与“Harold”分离的全新对象就出现了。我想知道的是,既然“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
因此,考虑因素比我最初设想的要多,因此初始值不一定非要在更改后超出范围。