有人可以用非常简单的方式解释为什么当数组本质上是通过引用传递并且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);
}
}
}
答案 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
将反映出这一变化。