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指向的那个数据的本身
以上是我个人推理,经过运行代码验证正确,如有高手觉得不合理之处,望批评指正!
本文深入探讨了一个使用递归方法实现的算法,在Java环境下如何通过引用传递机制改变内部参数值,以及如何理解其背后的原理。通过具体示例,详细解释了变量在不同作用域中的变化情况,并对比了在不同场景下`a += 1`和`a = a + 1`的区别,旨在帮助读者理解Java中引用类型变量的变化机制。
598

被折叠的 条评论
为什么被折叠?



