Lorsque vous clonez un Object 'A'
, vous créez un nouveau Object 'B'
(avec les mêmes références aux objets) mais dans une adresse de mémoire différente. Ainsi, lorsque vous modifiez l'objet 'A', vous n'accédez pas à la même adresse mémoire du Object 'B'
. Par conséquent, le changement dans le clone ne se reflète pas dans l'original et vice versa.
copie superficielle
clone général méthode d'un objet, crée une nouvelle instance de la même classe et copie tous les champs à la nouvelle instance et le renvoie. Ce n'est rien d'autre qu'une copie superficielle. La classe Object fournit une méthode clone et fournit un support pour la copie superficielle. Il renvoie 'Object' comme type et vous devez renvoyer explicitement à votre objet d'origine.
profonde Copie
Lorsque vous avez besoin d'une copie en profondeur, vous devez implémenter vous-même. Lorsque l'objet copié contient un autre objet, ses références sont copiées récursivement en copie profonde. Lorsque vous implémentez une copie en profondeur, faites attention aux dépendances cycliques. Si vous ne voulez pas implémenter une copie profonde, vous pouvez opter pour la sérialisation. Il implémente une copie profonde implicitement et gère avec élégance les dépendances cycliques.
Voici un exemple illustratif:
peu profond
profonde:
Vous avez mal compris le clone. Il y aura un nouvel objet une fois qu'un objet est cloné. Ce sont des objets différents donc vous changez sur B n'affecte jamais A.Cependant, dans un clone peu profond, certains membres seront partagés sur les deux objets car les références à ces membres sont également clonées. –
Donc, si j'ajoute un objet de classe à l'original, il ne devrait pas apparaître dans le clone et vice versa? – Floose