6

配列のコピーを作成しているこのコードがあります。usingSystem.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();
}
}
4

1 に答える 1

10

作成したオブジェクト:

char[] copyThree = new char[7];

GC されます。「最終結果」は次の方法で達成できます。

char[] copyThree = copyFrom.clone();

を使用しSystem.arrayCopy、配列の型や配列のサイズなどの特定の要件を満たす必要がありますcopyFromcopyTo

メソッドを使用するcloneと、他の配列と同じ内容を持つ新しい配列が作成されます (同じオブジェクト - 同じ参照であり、同じ内容の異なるオブジェクトではありません)。もちろん、配列の型は同じでなければなりません。

どちらの方法でも、配列の内容の参照をコピーします。それらは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
于 2013-09-12T18:48:11.637 に答える