java-传递参考var和GC
作者:互联网
这个问题已经在这里有了答案: > Is Java “pass-by-reference” or “pass-by-value”? 80个
如果我们将引用变量传递给method并修改了对象的状态,则这些修改是永久性的(如果我错了,请纠正我).考虑一下代码:
class CardBoard {
Short story = 200;
CardBoard go(CardBoard cb) { //....(1)
cb = null;
return cb;
}
public static void main(String[] args) {
CardBoard c1 = new CardBoard();
CardBoard c2 = new CardBoard();
CardBoard c3 = c1.go(c2); //pass c2 into a method ....(2)
c1 = null;
// do Stuff
} }
在上面的代码中,我们说cb = null并返回cb时,c2(以及c3)现在不应该具有空引用吗? (PS:最初的问题是在“ // do stuff”之后询问是否有资格使用gc的对象.答案是2,但我在理解它时遇到了问题.)
解决方法:
否,因为cb = null仅将原始实例中的’cb’引用目标替换为null,因此c2不会受到影响.
当您仅将c2传递给函数时,情况将是这样的:
cb c2
| |
------------------
| object |
------------------
一旦cb设置为null,它将变为
null--cb c2
|
-------------------
| object |
-------------------
然后返回cb并将其分配给c3,则实际上c3 = null.
但是,另一方面,如果您更改该对象的内部状态,则肯定会更改所有引用所引用的对象的状态.
标签:pass-by-value,java,garbage-collection 来源: https://codeday.me/bug/20191123/2065138.html