Long数据作为方法参数在递归调用的变化

public List<Trade> getWaitRatesTrade(UserBean userBean,List<Trade> tradeList,Long pageNO) throws ApiException{
        TradesSoldGetResponse tsgr = TBUtil.getWaitRatesTrade(userBean,pageNO);
        tradeList.addAll(tsgr.getTrades());
        if(tsgr.getHasNext() && pageNO < 10){
            getWaitRatesTrade(userBean,tradeList,++pageNO);    
        }
        System.out.println(pageNO);
        return tradeList;

    }

假如我一开始传入的pageNO是1,那么打印出来的最后一个pageNO可能是多少

分析如下:首先传入来一个1,那么就是说
在栈中有这个一个引用变量pageNO-->1

假如if条件一次都不成立,那么最后打印出来的自然是1


假如if条件成立了,首先第一次执行getWaitRatesTrade(userBean,tradeList,++pageNO);    

时,pageNo是主体方法中的,++pageNO的结果是将pageNO-->2

所以这个时候,主体方法的pageNo---->2了,

然后第一次递归进入的方法中,pageNo也是-->2

然后第一次递归方法中的if如果继续成立,那么又会执行 getWaitRatesTrade(userBean,tradeList,++pageNO);    

此时pageNo-->3

这里就是我们说的重点了,主体方法中的pageNO和第一次递归调用中的方法pageNo虽然都是2,

但却是两个不同的引用变量,这是因为JAVA方法传递的机制是复制值或者引用传递,

所以虽然第一次递归的方法之中改变了pageNo——>3

但是主题方法中的引用依然指向原来的2

所以结果是2


补充说明:Long a = 1;         

     a = a+1;我认为a+1意思是创建个新数据也就是2,而不是改变被a指向的数据,"a="则改变了a的指向

    public static void main(String[] args) {
        Long a = 1L;
        Long b = 20L;
         b = a+1;
         System.out.println(a);
    }

打印出来的a是1,这就是说明a+1不能改变被a指向的那个数据的本身

以上是我个人推理,经过运行代码验证正确,如有高手觉得不合理之处,望批评指正!

你可能感兴趣的:(Long数据作为方法参数在递归调用的变化)