一直以为finally里面的操作不会对try中的return 有影响直到看到牛客网上的这个题输出结果是30,才决心做个实验来看看
试验如下
package com.txr.basicSearch;
public class tryFinally {
public static void main(String[] args) {
System.out.println(test());
}
public static int test()
{
int b=0;
try{
b+=10;
return b;
}
catch (Exception e){
}
finally {
b+=10;
return b;
}
}
}
输出结果:20 显然finally的操作改变了try中的b
那么不改变 的情况是什么呢?
package com.txr.basicSearch;
public class tryFinally {
public static void main(String[] args) {
System.out.println(test());
}
public static int test()
{
int b=0;
try{
b+=10;
return b;
}
catch (Exception e){
return b;
}
finally {
b+=10;
//return b;
}
}
}
发现输出的值为10
从这里我们可以得出结论,当finally拥有return 时会返回finally中的return ,而如果finally没有return而是try中的return 实际上try中的return 值已经在栈中保存了一份,所以这个时候finally中对try中return的值做修改是无法改变最终返回的值