<分区>
摘自 SCJP 6 准备书 -
给定:
class CardBoard {
Short story = 200;
CardBoard go(CardBoard cb) {
cb = null;
return cb;
}
public static void main(String[] args) {
CardBoard c1 = new CardBoard();
CardBoard c2 = new CardBoard();
CardBoard c3 = c1.go(c2);
c1 = null;
// do Stuff
}
}
当达到//doStuff 时,有多少对象符合 GC 条件?
A. 0
B. 1
C. 2
D. Compilation fails
E. It is not possible to know
F. An exception is thrown at runtime
正确答案是 C - “只有一个 CardBoard 对象 (c1) 符合条件,但它有一个关联的短包装对象也符合条件。”
我的问题是为什么 c3 不符合收集条件?
我的想法是——
c1.go(c2) 将局部引用变量 cb(它是 c2 的副本)设置为 null,然后返回分配给 c3 的 cb。我知道c2本身的引用变量在方法中是不能修改的,只能修改后面的对象。然而,在我看来,引用变量的副本 cb 被设置为 null 并分配给 c3。为什么c3在这个实例中没有设置为返回的null?