之间有什么区别
System.arraycopy()
,clone()
Arrays.copyOf()
arraynew = arrayold
?答案 0 :(得分:23)
System.arraycopy()
使用JNI(Java Native Interface)进行复制
一个数组(或它的一部分),所以它是
你可以确认,非常快
here; clone()
创建一个 new 数组,其特征与旧数组相同,即相同大小,相同类型和相同内容。有关clone
正在运行的一些示例,请参阅here manual copying
是手动复制。关于这种方法没有太多可说的,只是很多人发现它是performant最多的。arraynew = arrayold
不复制数组;它只是指向 arraynew
到arrayold
的内存地址,换句话说,你只是将引用分配给旧数组。< / LI>
答案 1 :(得分:13)
System.arraycopy()
将数据从一个现有数组复制到另一个数组中,并且根据参数仅复制部分数据。clone()
分配一个与原始数据类型和大小相同的新数组,并确保它具有相同的内容。System.arraycopy()
完全相同,但代码更多,因此错误的来源更多arraynew = arrayold
仅将对数组的引用复制到新变量,不会影响数组本身还有一个有用的选项:
Arrays.copyOf()
可用于创建具有不同大小的另一个数组的副本。这意味着新阵列可以比原始阵列更大或更大,并且通用大小的内容将是源的内容。甚至还有一个版本可以创建不同类型的数组,以及一个可以指定要复制的元素范围的版本(Array.copyOfRange()
)。
请注意,所有这些方法都会生成浅层副本。这意味着只复制存储在数组中的引用,并且引用的对象不重复。
答案 2 :(得分:5)
Arrays.copyOf(..)在内部使用System.arrayCopy(..)方法。
答案 3 :(得分:0)
有答案但不完整。
考虑的选项是
以下是Arrays.copyOf()
的java实现public static double[] More ...copyOf(double[] original, int newLength) {
double[] copy = new double[newLength];
System.arraycopy(original, 0, copy, 0,
Math.min(original.length, newLength));
return copy;
}
正如您所见,copyOf在内部使用System.arraycopy。
注意:明显比较速度没有意义,因为它们的功能不同。