我有一个关于 java 中的引用和垃圾收集器的问题。
当调用带有参数的方法时,比如说一个数组,它会被发送一个被视为参数的数组引用的副本。
假设:垃圾收集器在调用方法后或在方法内对所考虑的数组执行操作时触发。
现在,无论垃圾收集器执行什么操作和移动,调用方法和被调用方法中的数组引用是否相同(垃圾收集器可以将引用从 eden 移动到幸存者 1)?
问题的更简单表达:您可以依赖此引用副本,以便将其用作“通过引用”发送参数的机制吗?
非常感谢! 罗克珊娜
最佳答案
如果您想询问是否可以像这样伪造通过引用:
// We'd like to pass x by reference...
String x = "hello";
String[] array = { x };
foo(array);
x = array[0];
...
static void foo(String[] array)
{
array[0] = array[0] + "foo";
}
...那么是的,这将始终有效,并且不受垃圾收集的影响。
我个人会尽量避免它,但是是的,它会起作用:)
请注意,与真正的引用传递不同,如果方法抛出异常,则方法调用后的赋值将不会发生,因此您将丢失“更改”。
关于java - 关于垃圾收集和引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7892922/