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

本文深入探讨了一个使用递归方法实现的算法,在Java环境下如何通过引用传递机制改变内部参数值,以及如何理解其背后的原理。通过具体示例,详细解释了变量在不同作用域中的变化情况,并对比了在不同场景下`a += 1`和`a = a + 1`的区别,旨在帮助读者理解Java中引用类型变量的变化机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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指向的那个数据的本身

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值