首页 > 其他 > 详细

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

时间:2014-03-03 03:56:33      阅读:447      评论:0      收藏:0      [点我收藏+]
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数据作为方法参数在递归调用的变化,布布扣,bubuko.com

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

原文:http://blog.csdn.net/rnzuozuo/article/details/20233091

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!