2017-07-01 2 views
4
int[] a = new int[10]; 
for (int i = 0; i < 10; i++) { 
    a[i] = randomFill();//randomFill is a method that generates random numbers 
} 

int[] b = new int[a.length]; 
for (int j = 0; j < a.length; j++) { 
    b[j] = a[j] 
} 

int[] c = new int[a.length]; 
for(int k = 0; k < a.length; k++) { 
    c[k] = a[k] 
} 

sind beide Array b und Array c die tiefe Kopie von Array a? Ich muss Array A ändern, aber seine ursprünglichen Werte beibehalten, damit ich es für später verwenden kann, und der Hinweis, den ich erhielt, war, tiefe Kopie zu verwenden. Ich kann nicht sagen, ob mein Code als tiefe Kopie betrachtet wird ...wäre dies ein Beispiel für eine tiefe Kopie?

+1

Das ist eine flache Kopie, aber da Sie mit Primitiven und nicht mit Objekten arbeiten, ist eine flache Kopie alles was Sie brauchen (es gibt keinen wirklichen Unterschied). –

+0

Ja, wenn es kompiliert würde, wären sowohl b als auch c tiefe Kopien von a. Fügen Sie ein paar Semikolons hinzu, um es kompilieren zu lassen. –

+0

@RudyVelthuis 'b = c = a;' –

Antwort

3

a ist ein Array von int (s), sie haben nur einen primitiven Wert - so ist die Antwort ja. Das Ändern von b (oder c) wirkt sich nicht auf a aus. Aber könnten Sie Arrays.copyOf(int[], int) verwenden wie

int[] b = Arrays.copyOf(a, a.length); 
int[] c = Arrays.copyOf(a, a.length); 
1

Deep copy Begriff konnte nicht auf das Kopieren einfaches Array von ganzen Zahlen angewendet werden. Dies betrifft komplexere Datenstrukturen wie Sammlungen von Objekten, die auch verschachtelte Objekte/Sammlungen enthalten können.

+0

Es ist eine tiefe Kopie auch. Eine flache Kopie würde nur die Referenzen kopieren: 'b = a; c = a; '. Sie haben Recht, dass tiefe Kopien normalerweise auch tief verschachtelte Inhalte kopieren müssen, aber hier sind keine. –

Verwandte Themen