以前虽然知道在try finally语句中,即使try块里有return语句,finally语句也会在return语句执行之前执行,却不知道return表达式与finally语句的执行顺序。
这个语句的输出是2而不是3。
当执行到return ++i;
jvm是先执行 ++i,把结果2存到临时变量,然后在执行finally语句里的++i,所以最终的i的值虽然是i,但方法返回的值却是2。
其实以前的理解没有错,因为return ++i;是一个符合语句了,相当于:
public class Test {
public static int a() {
int i = 0;
try {
i++;
return ++i;
} finally {
i++;
}
}
public static void main(String[] args) {
System.out.println(a());
}
}
这个语句的输出是2而不是3。
当执行到return ++i;
jvm是先执行 ++i,把结果2存到临时变量,然后在执行finally语句里的++i,所以最终的i的值虽然是i,但方法返回的值却是2。
其实以前的理解没有错,因为return ++i;是一个符合语句了,相当于:
int j = ++i;
return j;