先给出代码:
给出结果:
public class Trycatch{
public static int testFinally1(){
int result=1;
try{
result=2;
return result;
}catch(Exception e){
return 0;
}finally{
result=3;
System.out.println("execute finally1");
}
}
public static StringBuffer testFinally2(){
StringBuffer s=new StringBuffer("Hello");
try{
return s;
}catch(Exception e){
return null;
}finally{
s.append(" World");
System.out.println("execute finally2");
}
}
public static void main(String[] args){
int resultVal=testFinally1();
System.out.println(resultVal);
StringBuffer resultRef=testFinally2();
System.out.println(resultRef);
}
}
execute finally1
2
execute finally2
Hello World
解释:
先return 2会把值存储到一个指定位置,此时运行finally,去改变result也不会改变返回结果。
但是此处的s是一个引用,只有地址不变,里面的值可以发生改变。