在Java中使用finally块进行GC时,Java如何处理返回的引用?

在Java中使用finally块进行GC时,Java如何处理返回的引用?,java,reference,garbage-collection,finally,try-finally,Java,Reference,Garbage Collection,Finally,Try Finally,在下面的场景中,GC会发生什么? 我非常确定对“a”的引用实际上不会返回,因此不必担心将此引用保留在范围内。 “a”的返回基本上从未发生过,因此超出了范围,只返回了“b” Object testFinally(){ try { Object a = new Object(); return a; } finally { Object b = new Object(); return b; } } void

在下面的场景中,GC会发生什么? 我非常确定对“a”的引用实际上不会返回,因此不必担心将此引用保留在范围内。 “a”的返回基本上从未发生过,因此超出了范围,只返回了“b”

Object testFinally(){
    try {
        Object a = new Object();
        return a;
    } finally {
        Object b = new Object();
        return b;
    }
}

void callToTestFinally(){
   Object v = testFinally();
}

和往常一样。如果一个实例不再可以通过强引用访问,它将有资格进行垃圾收集。对于您的a来说没有什么不同,最后,它超出了范围并且可以被收集。

这种滥用
finally
的行为与GC有什么关系?引用“a”是否返回到调用方范围,或者它从未返回,因此“返回a”被忽略?它将如何返回?你有两个返回语句,但是你知道这个方法只能返回一个值。我只是确定一下,所以问题就来了。实际上,当有一个最终的返回x时,你根本不会期望x++在返回x++中运行,但它确实运行了,所以我只是确定一下由两个(好吧,不止两个,但让我们保持简单)步骤组成。递增x,然后返回其值。
返回a并没有被忽略,只是在它被执行之后,它被
返回b覆盖在finally块中,使原始返回值消失。