如果返回值是基本数据类型,finally中代码并不会改变返回值
如果返回值是一个对象,finally代码会改变返回值
意思就是 当try/catch中遇到return语句时,return语句并不执行,而是先创建return值的副本,然后跳转到finally代码块中,执行完finally中的语句后回到try/catch中执行return语句。
如果return后是一个基本数据类型,则创建的副本为该值,若return中是一个对象,则副本为该对象的内存地址,在finally中改变值后会在return中生效。
另外如果finally中有return则一定覆盖try/catch中的return语句
public static void main(String[] args) {
System.out.println(test().getAge());
}
static TestDTO test(){
TestDTO t = new TestDTO();
try {
System.out.println("try");
t.setAge(13);
return t;
}catch (Exception e){
System.out.println("catch");
return t;
}finally {
System.out.println("finally");
t.setAge(15);
//return a++;
}
}
========
try
finally
15