我读到 Java passes arrays to functions by reference (sort of)并且它允许对其进行修改,这将反射(reflect)在原始数组上。
嗯,我不确定上面链接中的引用部分,因为有人说 Java is always pass by value, with no exceptions, ever.但是我确信对参数数组的修改也会改变原始数组。
那么这是否意味着当我返回通过参数传递的同一个数组时,Java 会返回原始数组的副本?虽然不这样做并使用原始数组代替会节省一些内存和 CPU 使用率?还是 Java 在这两种情况下都复制数组?
例如,以下两个函数是否相同,或者第一个是否节省内存和 cpu 资源?:
public void modifyArray (int[] arr)
{
for (int i = 0; i < arr.length; i++) arr[i] = i + 1;
}
public int[] modifyArray (int[] arr)
{
for (int i = 0; i < arr.length; i++) arr[i] = i + 1;
return arr;
}
编辑:
更清楚一点,我只关心性能(尤其是在处理大型数组时),我实际上不需要复制数组,我有一个现有代码可以执行此操作,想知道是否删除retun 部分会提高性能。
最佳答案
Java 按值传递引用。这意味着更换数组没有害处,即
public void f(String[] a)
{
a = new String[42];
}
但更改其中的任何内容都会更改原始数组。一般对象的深度复制可能非常耗时,并且在对象包含引用对象的对象的情况下也很困难......因此标准行为是避免它。
关于java - Java函数在返回参数时会复制参数传递的数组吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36335145/