2017-02-27 6 views
1

私はSystem.arrayCopy()がそれに渡されるObject[]配列の浅いコピーをどのように作成するのか理解しています。System.arrayCopyを使用してプリミティブ型の配列をコピーします。

しかし、int[]またはbyte[]のようなプリミティブ型の配列ではどのように動作するのか分かりません。コピーの参照はありません。この場合、浅いコピーや深いコピーでは違いはありません。

+2

あなたは既に参照がないことを知っているので、どのようなexacltyがこの質問のポイントですか? – Tom

+0

これらの配列がオブジェクトクラスを拡張しているので、私は尋ねました。 – user1071840

答えて

2

あなたが述べたように:

をコピーするための一切の言及はありません。この場合、浅いコピーや深いコピーでは違いはありません。

プリミティブの場合、System.arrayCopyは配列の要素の値をコピーするだけです。

0

System.arrayCopy()プリミティブ型の配列結果ディープコピー。あなたのコメントから

: 「この場合、浅いか深いコピーの違いがあってはならない」

違いがあります。変更後のコピー先の配列がシャローコピーの場合は、コピー先の配列に加えた変更がコピー元の配列に影響を与える必要があります。しかし、ここではそうではありません。

私はここに例を挙げてみましょう:あなたは結果を見る場合は浅いコピー場合は、「ARR1のために変更した後、」、

public class ArrayCopy { 
public static void main(String args[]) { 
    int arr1[] = {0, 1, 2, 3, 4, 5}; 
    int arr2[] = {10, 11, 12, 13, 14, 15}; 
    System.out.println("Before change"); 
    System.out.println("arr1 " + Arrays.toString(arr1)); 
    System.out.println("arr2 " + Arrays.toString(arr2)); 
    System.arraycopy(arr1, 0, arr2, 0, 3); 
    System.out.println("After change for arr2"); 
    System.out.println("arr1 " + Arrays.toString(arr1)); 
    System.out.println("arr2 " + Arrays.toString(arr2)); 
    int arr3[] = {20, 30}; 
    System.arraycopy(arr3, 0, arr1, 0, 2); 
    System.out.println("After change for arr1"); 
    System.out.println("arr1 " + Arrays.toString(arr1)); 
    System.out.println("arr2 " + Arrays.toString(arr2)); 
}} 

    Result: 
Before change 
arr1 [0, 1, 2, 3, 4, 5] 
arr2 [10, 11, 12, 13, 14, 15] 
After change for arr2 
arr1 [0, 1, 2, 3, 4, 5] 
arr2 [0, 1, 2, 13, 14, 15] 
After change for arr1 
arr1 [20, 30, 2, 3, 4, 5] 
arr2 [0, 1, 2, 13, 14, 15] 

    arr1 [20, 30, 2, 3, 4, 5] 
        arr2 [20, 30, 2, 13, 14, 15] 

をもたらすべきであるしかし、それはそうではありませんSystem.arrayCopyはプリミティブ型の詳細コピーを生成するためです。これがあなたの質問に答えることを願っています

関連する問題