2010-09-02 11 views

Répondre

4

Vous devez distinguer deux types de copie: peu profond et profond. Alors que la copie profonde alloue un nouvel espace pour tout le tableau et tout son contenu (s'il contient des références, alors un nouvel espace est alloué pour créer des instances avec les mêmes valeurs que celles copiées), la copie superficielle alloue juste l'espace avec la même taille du tableau copié.

Exemple:

matrice Un a été alloué pour contenir seulement deux mutable objects (par exemple .: une liste ou une liste de tableaux). Voulez-vous avoir juste une copie du tableau "extern" (celui qui contient les deux références) ou voulez-vous une copie profonde, qui va allouer aussi nouvelles instances des deux références contenues dans A?

Dans le premier cas, par exemple:

A est le tableau à partir de référence 0x0000AA

ElementOne commence à 0x00BBCC

ElementTwo commence à 0x00BBFF

Si vous exécutez une copie superficielle :

B (le nouveau tableau) commencera à la référence 0x0000BB, ElementsOne et ElementsTwo pointera vers les anciennes références (0x00BBCC, 0x00BBFF).

Si vous exécutez une copie en profondeur, non seulement il alloue le nouvel espace pour le tableau, mais il alloue également de l'espace pour contenir les nouvelles instances (une nouvelle liste, un nouvel arrayliste ...).

+0

bel exemple bon à comprendre – selvaraj

3

Seuls les éléments du tableau sont copiés. S'il s'agit de types de référence, seule la référence est copiée. Tous les sous-types ou éléments de l'objet derrière la référence sont et non copiés.

5

Si vous avez des références dans ArrayList, les mêmes références seront copiées dans la ArrayList clonée. Les objets ne seront pas clonés.

Questions connexes