Java中finally块中值改变,没有在return体现?

public int test() {
    int x = 1;
    try {
        ++x;
        return x;
    } finally {
        ++x;
    }
}

为什么执行test()返回的值是2,而不是3,finally不是在return之前执行吗?
这个与jvm的堆栈有关吗?

阅读 4.4k
3 个回答

这个debug一下就知道了啊,先执行到return x,所以test()的return值就是2,return完之后才跑的final block,之后i又加了1和return出去的值没有关系。

先执行到return,这时候return的值已经确定了。
finally是在真正return之前,不过是在执行到return之后,所以return的值没有改变。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题