我有一个关于数组地址的问题。假设我们有这段代码:
main(){
int[] numbers = {1, 2, 3};
method(numbers);
}
method(int[] methodNumbers){
methodNumbers= new int[methodNumbers.length];
return methodNumbers;
}
这就是我认为我所知道的。如果我错了,请纠正我。
所以我知道有主栈帧、方法栈帧和堆。在我们的 main 中,存储了 int[] 数字
。它指向堆中存储索引的地址。我们将 int[] 数字
传递到 methodNumbers
参数中,因此现在它们指向堆中的同一位置。在我们的方法中,我们为 methodNumbers
声明了一个新的 int,因此现在 int[] methodNumbers
数组指向堆中的新位置。但最终我们返回了methodNumber
。
我的问题是int[]numbersArray
最后指向哪里。它指向同一个地方还是指向与 methodNumbers
相同的位置?
最佳答案
Java 是 pass-by-value语言,因此您无法更改作为参数传递的变量的值(=reference(!) 如果是数组)(但您可以更改它们引用的内容)。
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;
}
关于Java返回原始数组的数组地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40117684/