java - 克隆与在 Java 中复制数组?

标签 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', '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。 “最终结果”可以通过以下方式实现:

char[] copyThree = copyFrom.clone();

使用System.arrayCopycopyFromcopyTo需要满足一定的要求,比如数组类型和数组大小。

使用 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]);

}

提供:

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

关于java - 克隆与在 Java 中复制数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18771899/

相关文章:

Java 如何将大数组复制到小数组?

C++ 如何复制字符串中的文本(从 8 个字母到 12 个字母)

使用中间件访问 Java 智能卡

java - Jackson 从 json 字符串转换为 Java 对象会产生默认对象

java - Hibernate 似乎形成了错误的查询

java - 将中缀转换为后缀时识别负值

java - 使用泛型创建 Array 对象

java - 连接到google fit android API不在 Activity 类中

java - 来自数组的 EnumSet,最短的变体?

MSBuild - 如何复制可能存在或不存在的文件?