Java中return 1返回的是int还是Integer&&finally中return问题

Java中return 1返回的是int还是Integer&&finally中return问题在Java中return1;中返回的是Integer值,在返回的时候基本类型值1被封装为Integer类型。定义一个Test类,在异常处理try中和finally中分别return;执行结果嗯,没问题,最后执行finally改变return的返回值。下面在看一个:按照上面的逻辑会返回执行

大家好,欢迎来到IT知识分享网。

 

Javareturn 1;中返回的是Integer值,在返回的时候基本类型值1被封装为Integer类型。

定义一个Test类,在异常处理try中和finally中分别return ;

 

public class Test {

    public static void main(String[] args) {
         System.out.println(new Test().test());
     }
     int test() {
         try {
             return func1();
         }finally{
             return func2();
         }
     }

     int func1() {
         System.out.println("func1");
         return 1;
     }

     int func2() {
         System.out.println("func2");
         return 2;
     }

 执行结果

Java中return 1返回的是int还是Integer&&finally中return问题

嗯,没问题,最后执行finally改变return的返回值。下面在看一个:

public class Test {

    public static void main(String[] args) {
         System.out.println(new Test().test());
     }
    static int test()  {
        int x = 1;
        try {
            return x;
        }finally {
            ++x;
        }
    }
}

按照上面的逻辑会返回执行结果为2,但结果并不是这样:

Java中return 1返回的是int还是Integer&&finally中return问题

 

 这里就要讲到finally对于return的处理:

在finally块中处理返回值,当定义为引用类型时,会先返回try中的返回值,然后执行finally会重置返回值,当定义为基本类型时,不会重置try的返回值。

异常代码加上try语句就标志着运行时会有一个Throwable线程监视该方法的运行,当出现异常时,交由异常逻辑处理,方法在栈内存中运行的,会按照“先进后出”的原则执行,main方法调用异常方法,main方法在下层,异常方法在上层。

当为基本类型时,异常方法执行完毕return x后,此方法的返回值以确定为固定值(基本类型为值拷贝),此后finally代码块修改已经没有意义(类似值传递,可以把finally块看做方法体)当为引用类型时,因为是地址拷贝,所以值会改变。(类似于地址传递)

 

即当定义为int类型时,return x;是值拷贝,所以finally无法修改x的值。

当为return 1;时,因为结果发生个改变,即返回的是finally中的值,即为地址拷贝,返回的是引用类型,即可确定return 1;此时为return new Integer(1);

即return 1;返回的是Integer对象。

关于finally中return的处理;学习与《编写高质量代码(改善Java程序的151个建议)》书中  第113条建议—-不要在finally块中处理返回值,笔记见博客:https://blog.csdn.net/sanhewuyang/article/details/84333062

 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/33387.html

(0)
上一篇 2023-12-14 11:45
下一篇 2023-12-14 20:00

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信