Ich habe irgendwo gelesen, dass System.arraycopy
erstellt eine neue Kopie für primitive Datentypen und flache Kopie für Objektreferenzen.System.arraycopy() flache Kopie oder deepcopy mit primitiven und Objektreferenzen
so begann, dass ich das Experiment, das mit folgendem Code
//trying with primitive values
int a[] ={1,2,3};
int b[] = new int[a.length];
System.arraycopy(a,0,b,0,a.length);
b[0] = 9;
System.out.println(Arrays.toString(a));
System.out.println(Arrays.toString(b));
//now trying with object references
Object[] obj1 = {new Integer(3),new StringBuffer("hello")};
Object[] obj2 = new Object[obj1.length];
System.arraycopy(obj1,0,obj2,0,obj1.length);
obj1[1] = new StringBuffer("world");
System.out.println(Arrays.toString(obj1));
System.out.println(Arrays.toString(obj2));
und der Ausgang
[1, 2, 3]
[9, 2, 3]
[3, world]
[3, hello]
war Aber was erwartete ich war
[1, 2, 3]
[9, 2, 3]
[3, world]
[3, world]
aus dem obigen Code, Ich habe verstanden, dass System.arraycopy
tiefe Kopie für Objektreferenzentut Wenn 10 so, wie obj1[0] == obj2[0]
gibt true
"Deep-Kopie für Primitive". Wie können Sie eine tiefe Kopie für Primitive machen, wenn sie sich per definitionem nicht auf etwas tieferes beziehen? – RealSkeptic