通过引用传递的递归和参数

时间:2019-06-30 13:28:13

标签: java recursion parameters pass-by-reference

有人可以用非常简单的方式解释为什么当数组本质上是通过引用传递并且temp [0]是999并以num1形式传递到someFunction()时,下面的代码为什么输出35而不是999的原因。

公共类TestB {

public static void main(String[] args)
{
    int[] num1 = {35};
    someFunction(num1, 3);     
    System.out.println(num1[0]);  //prints 35
}

public static void someFunction(int[] num1, int count){

    if (count!= 0){
        int[] temp = {999};
        someFunction(temp, count-1);
    }
}

}

1 个答案:

答案 0 :(得分:1)

someFunction不读取或写入num1参数。因此,someFunction 按照定义不会影响从num1传入的main数组。

情况会如此,无论您选择的语言中的数组参数是通过引用还是通过值传递。

  

在我跟踪算法时,在第二次调用时,num1 [0]为999   直到我回到main为止。

我怀疑您对main中的变量名和someFunction中的参数名相同感到困惑。您看到num1被设置为特定值-但这不是main的{​​{1}}-而是num1的{​​{1}}。为了使调试时更清晰,请将其中之一的名称(someFunction中的变量名称或num1中的参数名称)更改为main

就我想达到的结果而言,我怀疑,也许不是:

someFunction

您可能打算写:

bob

请特别注意(根据我的建议的更改)public static void someFunction(int[] num1, int count){ if (count!= 0){ int[] temp = {999}; someFunction(temp, count-1); } } 将写入public static void someFunction(int[] num1, int count){ if (count!= 0){ num1[0] = 999; someFunction(num1, count-1); } } 参数(传入的参数,而不是新的someFunction数组)-因此该数组位于num1将反映出这一变化。