zoukankan      html  css  js  c++  java
  • Java的finally语句到底是在return之前还是之后执行?

      网上很多人说finally的执行顺序在return之前,我认为这种说法并不是很准确

      准确的来说finally是在return将要返回之前(此时若返回的是基本数据类型,那么记录下来它的值,如果是引用数据类型则记录下来这个时候的地址)执行的

      可以参考下面代码的结果

        public static void main(String[] args) {
    		
    		int test = test(3,5);
    		System.out.println(test);
    
    	}
    
    	public static int test(int x, int y){
    		int result = x;
    		try{
    			if(x<0 || y<0){
    				return 0;
    			}
    			result = x + y;
    			return result;
    		}finally{
    			result = x - y;
    		}
    	}
    

      上面的结果返回的结果是8

      为什么是8而不是-2,是因为java的传递机制是值传递,return 的时候复制了数据的值

      此时也证明了(开头的那句话)虽然result最终的值变成了-2,但是我们当时记录要返回

      的值是原来已经复制过的。

      再次总结一句

      return的时候是复制了一个变量然后返回,所以之后finally操作的变量如果是基本类型的话不会影响返回值。

      但是如果返回值是引用类型的话,因为指向同一个对象所以还是有影响的。

      

  • 相关阅读:
    洛谷 P5043 树的同构 题解
    CF 1178E Archaeology 题解
    UVA 1642 MagicalGCD 题解
    洛谷 P3919 可持久化线段树 题解
    SPOJ 4003 Phone List 题解
    OI/ACM最全卡常大招
    洛谷 P3368 树状数组 题解
    逆序对
    洛谷 U78696 图书馆馆长的考验 题解
    原创 疲劳炉石传说
  • 原文地址:https://www.cnblogs.com/WINDZLY/p/12654482.html
Copyright © 2011-2022 走看看