gpt4 book ai didi

Java浅拷贝数组

转载 作者:行者123 更新时间:2023-12-02 03:34:16 24 4
gpt4 key购买 nike

如果这是浅拷贝

double[] a = new double[100];
a = b; // let b be some other double array[100]

我知道更好的方法是使用 for 循环或使用

System.arrayCopy(b,0,a,0,100);

但是这会发生什么?

public double[] function1(){
returns somedouble[100];
}

double[] a = new double[100];
a = function1(); // i believe this will also be a shallow copy

System.arrayCopy(function1(),0,a,0,100); // will this call function1 100 times?

最佳答案

double[] a = new double[100];
a = b; // let b be some other double array[100]

创建一个名为a的 double 组,大小为100。现在,当您a = b时,会将b数组的引用复制到变量a。

     +--------------------------------------------+  <- Suppose whole
a-> | 2.5 | | | | | | | | | | | | | | array is filled
+--------------------------------------------+ with value 2.5

+--------------------------------------------+ <- Suppose whole
b-> | 7.9 | | | | | | | | | | | | | | array is filled
+--------------------------------------------+ with value 7.9

a = b 之后

     +--------------------------------------------+  <- Suppose whole
| 2.5 | | | | | | | | | | | | | | array is filled
+--------------------------------------------+ with value 2.5

a-> +--------------------------------------------+ <- Suppose whole
b-> | 7.9 | | | | | | | | | | | | | | array is filled
+--------------------------------------------+ with value 7.9

现在 a 和 b 指向同一个数组。

public double[] function1(){
return somedouble[100];
}

double[] a = new double[100];
a = function1();

现在这里也发生了同样的事情。您创建一个名为 a 的数组,然后调用 function1() 并再次将返回的数组引用分配给 a。

System.arraycopy(function1(), 0, a, 0, 100);

这里的调用顺序是

1 -> function1() 将被调用,返回的数组引用将保存在临时变量中。

2 -> 调用System.arraycopy(临时变量, 0, a, 0, 100)

因此 function1() 将仅被调用一次。

作为旁注,请确保使用 System.arraycopy(args) 而不是 System.arrayCopy(args)

关于Java浅拷贝数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37626972/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com