我对数组的地址有疑问。让我们说这段代码:
main(){
int[] numbers = {1, 2, 3};
method(numbers);
}
method(int[] methodNumbers){
methodNumbers= new int[methodNumbers.length];
return methodNumbers;
}
这就是我认为我知道的。如果我错了,请纠正我。
所以我知道主堆栈框架,方法堆栈框架和堆。在我们的主要内容中,存储了int[] numbers
。它指向堆中的地址,该地址是存储索引的位置。我们将int[] numbers
传递给methodNumbers
参数,现在它们指向堆中的相同位置。在我们的方法中,我们为methodNumbers
声明了一个新的int,所以现在int[] methodNumbers
数组指向堆中的新位置。但最后我们返回methodNumber
。
我的问题是int[] numbersArray
指向最后的位置。它是指向同一个地方还是指向与methodNumbers
相同的位置?
答案 0 :(得分:2)
Java是pass-by-value语言,因此您无法更改作为参数传递的变量的值( =引用(!),如果是数组)但是您可以改变他们所指的内容。)
main(){
int[] numbers = {1, 2, 3};
method(numbers); //returns pointer to new array created in the method; it's unused
//here numbers is unchanged, because changing parameter variables
//in method doesn't change variables outside the method
}
method(int[] methodNumbers){
methodNumbers= new int[methodNumbers.length];
//methodNumbers is a variable local to method,
//you can change it without interfering with other
//variables outside the method; but if you change
//value it referring to (for example via methodNumbers[0] = -1)
//you will change array you created before method
return methodNumbers;
}