Cela remonte à la vieille question de passage par référence vs en passant par valeur ...
Voir ce stackoverflow question
les deux lst1
et lst2
contiendra une valeur (représentée par lavariables) qui indiquera à la machine virtuelle Java comment trouver l'instance TestClass
dans la mémoire de segment. Si vous modifiez l'instance (il n'y a qu'une seule instance) en y accédant par e
, lst1
, ou lst2
les changements seront visibles partout!
La seule façon de modifier ce comportement est de remplacer la fonction Object clone()
en TestClass
et en passant à la fonction e.clone()
add(...)
.S'il vous plaît se réfère à la documentation
Si vous ne pouvez pas modifier le TestClass
pour toutes les raisons que vous pouvez également cloner l'instance par vous-même (essentiellement vous implémentez clone()
en dehors TestClass
). Créer une nouvelle instance TestClass
e2
avec l'opérateur new
puis obtenir ses variables d'instance (attention est-il contient d'autres objets personnalisés) de e
à travers son « apporteurs » et définir les valeurs à e2
par ses « faiseurs ». C'est moche comme l'enfer et j'espère que vous refusez de le faire ...
+1 Oui - c'est techniquement plus correct. Je pense que l'OP pensait que «e» était l'objet lui-même, alors qu'en réalité c'est l'adresse à l'objet –