gpt4 book ai didi

java - 递归和按引用传递参数

转载 作者:行者123 更新时间:2023-12-02 09:43:59 24 4
gpt4 key购买 nike

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

公共(public)类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);
}
}

}

最佳答案

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

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

As I trace through the algorithm, on the second call, num1[0] is 999 and continues to be until I return back to main.

我怀疑您对 main 中的变量名称和 someFunction 中的参数名称相同感到困惑。您看到 num1 设置为特定值 - 但这不是 mainnum1 - 那是 someFunctionnum1。为了在调试时更加清晰,请将其中一个名称(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 参数(传入的参数,而不是新的 temp code> array) - 因此 main 中的数组将反射(reflect)该更改。

关于java - 递归和按引用传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56825209/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com