下面的代码:
public class FinallyTest {
private static int test() {
int i=1;
try {
i=2;
return i;
} catch (Exception e) {
i = 3;
return i;
} finally {
i = 4;
}
}
public static void main(String[] args){
FinallyTest finallyTest = new FinallyTest ();
System.out.println("i=" + finallyTest.test());
}
}
打印结果是i=2,而不是等于4,为什么呢?
因为i是值变量 ,你在try里面写了return i; 这时虚拟机栈已经把 i 这时的值copy到栈顶,然后才再去处理finnaly,之后你对 i 进行任何改变不会影响这时候栈顶的这个返回值,只会影响 i 的值。所以尽管此时i的值变了,但那是 i 的事情,不是Return的事情。
本文探讨了Java中finally块内的变量返回问题。通过具体示例代码解释了为何finally块内对变量的修改不会影响已确定的返回值,这是因为虚拟机在执行return语句时会先将值复制到栈顶,随后的操作不会改变这个返回值。
171万+





