Java 方法调用输出混乱

Java 方法调用输出混乱,java,Java,我对输出感到困惑(即在Mno类中的showValue方法之后) 我得到了以下输出…如何打印0,9,98之后的显示值 F:\Train\oops>JavaLab2 前总碱值:98 显示前的ab值:98 显示值之前的ab值:9 0之前的showvalue中的ab 0之后的showvalue中的ab 显示值中的ab在:9之后 显示后的ab值:98 主管道中的ab:98 在Java中,在方法调用期间只传递变量的副本 对于基本体,它是值的副本;对于对象,它是对象引用的副本 因此,当您将副本传递给showV

我对输出感到困惑(即在
Mno
类中的
showValue
方法之后)

我得到了以下输出…如何打印0,9,98之后的显示值

F:\Train\oops>JavaLab2
前总碱值:98
显示前的ab值:98
显示值之前的ab值:9
0之前的showvalue中的ab
0之后的showvalue中的ab
显示值中的ab在:9之后
显示后的ab值:98
主管道中的ab:98

在Java中,在方法调用期间只传递变量的副本

对于基本体,它是值的副本;对于对象,它是对象引用的副本


因此,当您将副本传递给showValue方法时,main方法中int ab的值不会改变。

您在这里进行递归调用:

ab in showvalue before :98
showValue(98);
ab in showvalue before :9
 -> showValue(9);
  ab in showvalue before :0
  -> showValue(0); //if returns true here, so no more recursive call
  ab in showvalue after :0
 ab in showvalue after :9
ab in showvalue before :98

每次
ab=0
,再加上Java正在传递
ab
的副本,导致输出以金字塔形式出现


输出之前showvalue中的所有
ab都是在您从函数本身调用函数时产生的,每次传递
ab
的副本。鉴于
ab
的值实际上从未更改,一旦所有
showValue
调用都已计算完毕,循环将按相反顺序展开并打印旧副本。

这是一个递归调用。程序的控制返回到它用不同的值调用自己的点。 查看您的呼叫->

ShowValue(98)->ShowValue(9)->ShowValue(0)


明白了吗?

Java按副本传递,而不是按引用传递Hank u GV,实际上我没有正确理解代码,showvalue()方法中有“shovalue after”语句
ab in showvalue before :98
showValue(98);
ab in showvalue before :9
 -> showValue(9);
  ab in showvalue before :0
  -> showValue(0); //if returns true here, so no more recursive call
  ab in showvalue after :0
 ab in showvalue after :9
ab in showvalue before :98