下面的代码:
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的事情。