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操作的变量如果是基本类型的话不会影响返回值。

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