J'ai lu quelque part que System.arraycopy
crée une nouvelle copie pour les types de données primitifs et une copie superficielle pour les références d'objet.System.arraycopy() copie superficielle ou copie profonde avec des références de primitives et d'objets
donc, que j'ai commencé l'expérience que, avec ci-dessous le 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));
et la sortie était
[1, 2, 3]
[9, 2, 3]
[3, world]
[3, hello]
Mais ce que je pensais était
[1, 2, 3]
[9, 2, 3]
[3, world]
[3, world]
du code ci-dessus, J'ai compris que System.arraycopy
fait une copie profonde pour les références d'objet Si oui, comment obj1[0] == obj2[0]
donne true
"Copie en profondeur pour les primitives". Comment pouvez-vous faire une copie profonde pour les primitifs, alors que par définition, ils ne se réfèrent à rien de plus profond? – RealSkeptic