【发布时间】:2021-10-05 11:55:49
【问题描述】:
为什么函数内部的变量没有更新,但是当我在它外面打印它时,它不起作用。但是如果我对 ArrayList 做同样的事情,ArrayList 就会更新。为什么会这样???
public int perfectSum(int arr[],int n, int sum)
{
// Your code goes here
int i = 0;
helper(arr,sum,0,0,i);
return i;
}
void helper(int arr[], int target, int sum, int idx, int i){
if(idx == arr.length){
if(sum == target){
i++;
}
return;
}
helper(arr, target, sum+arr[idx], idx+1, i);
helper(arr, target, sum, idx+1, i);
}
【问题讨论】:
-
"Java对象变量只是指向内存堆中真实对象的简单引用。因此,即使Java通过值向方法传递参数,如果变量指向对象引用,真实对象也会也变了。” arraylist 是一个对象。
-
“如果我对 ArrayList 执行相同操作,则 ArrayList 将得到更新”— 与 arraylist 相同的是在 arraylist 上调用
++,这将无法编译。但是,如果您重新分配了一个 arraylist 变量,您将观察到您对 int 变量所做的相同事情,即在一种方法中更新局部变量不会改变另一种方法中的局部变量。。跨度>