Java返回原始数组的数组地址

标签 java arrays reference location

我有一个关于数组地址的问题。假设我们有这段代码:

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/

相关文章:

java - 从 JSF 项目根文件夹中读取 html 文件

C++ 在不复制 c 数组的情况下分配 N 维 vector

c++ - 指针可以指向 cpu 寄存器吗?

arrays - 如何循环遍历数组作为引用?

java - 如何从 JPQLQuery 获取 SQL 字符串

java - 如何检查 Java 字符串是否全是空格?

regex - bash:将 grep 正则表达式结果分配给数组

python - 将 a[i+j] 数组映射到 A[i,j] 矩阵

rust - Rust:使用函数修改引用的引用;它包含UB吗?

java - 打印时如何在JTable中添加背景图片?