finally中代码可能改变try代码块中的返回值

如果返回值是基本数据类型,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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容