Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中克隆还是复制阵列?_Java_Arrays_Copy_Clone - Fatal编程技术网

在Java中克隆还是复制阵列?

在Java中克隆还是复制阵列?,java,arrays,copy,clone,Java,Arrays,Copy,Clone,我有一段代码,我正在复制一个数组。 使用System.arraycopy似乎比使用clone()更冗长。但两者的结果相同。一个比另一个有什么优势吗? 代码如下: import java.util.*; public class CopyArrayandArrayList { public static void main(String[] args){ //Array copying char[] copyFrom = { 'd', 'e', 'c', 'a',

我有一段代码,我正在复制一个数组。 使用
System.arraycopy
似乎比使用
clone()
更冗长。但两者的结果相同。一个比另一个有什么优势吗? 代码如下:

import java.util.*;
public class CopyArrayandArrayList {
    public static void main(String[] args){
        //Array copying
    char[] copyFrom = { 'd', 'e', 'c', 'a', 'f', 'f', 'e'};
    char[] copyTo = new char[7];

    System.arraycopy(copyFrom, 0, copyTo, 0, 7);

    char[] copyThree = new char[7];
    copyThree=copyFrom.clone();
}
}

使用以下对象创建的对象:

char[] copyThree = new char[7];
将是gc'd。“最终结果”可通过以下方式实现:

char[] copyThree = copyFrom.clone();
使用
System.arrayCopy
copyFrom
copyTo
需要满足某些要求,如数组类型和数组大小

使用
clone
方法,将创建一个新数组,其中包含其他数组的相同内容(相同对象-相同引用,而不是具有相同内容的不同对象)。当然,数组类型应该是相同的

这两种方法都复制数组内容的引用。它们不会克隆对象:

Object[] array = new Object[] {
    new Object(),
    new Object(),
    new Object(),
    new Object()};
Object[] otherArray = new Object[array.length];
Object[] clonedArray = array.clone();

System.arraycopy(array, 0, otherArray, 0, array.length);

for (int ii=0; ii<array.length; ii++) {

    System.out.println(array[ii]+" : "+otherArray[ii]+" : "+clonedArray[ii]);

}

本文是相关的,但没有解释system.arraycopy是否是深度克隆。它确实提到克隆创建一个浅拷贝,这里的示例对此进行了说明。但是要知道system.arraycopy是否是深度克隆,并附上一个说明,对于JavaSystem的初学者来说是很有用的。arraycopy()只做Javadoc中所说的,没有更多,没有深度复制。
java.lang.Object@1d256a73 : java.lang.Object@1d256a73 : java.lang.Object@1d256a73
java.lang.Object@36fb2f8 : java.lang.Object@36fb2f8 : java.lang.Object@36fb2f8
java.lang.Object@1a4eb98b : java.lang.Object@1a4eb98b : java.lang.Object@1a4eb98b
java.lang.Object@2677622b : java.lang.Object@2677622b : java.lang.Object@2677622b