Lia*_*yan 3 java garbage-collection scjp pass-by-value
摘自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
}
}
Run Code Online (Sandbox Code Playgroud)
当达到// doStuff时,有多少对象符合GC条件?
A. 0
B. 1
C. 2
D.编译失败
E.无法知道
F.运行时抛出异常
正确答案是C - "只有一个CardBoard对象(c1)符合条件,但它有一个相关的Short包装器对象,也符合条件."
我的问题是为什么c3不符合收藏资格?
我的想法是 -
c1.go(c2)将本地引用变量cb(它是c2的副本)设置为null,然后返回分配给c3的cb.我知道c2本身的引用变量不能在方法中修改,只能修改它背后的对象.但是在我看来,引用变量cb的副本被设置为null并分配给c3.为什么在此实例中c3未设置为返回的null?