Référence et copie d'un tableau

mimosa803 Messages postés 345 Date d'inscription jeudi 15 février 2007 Statut Membre Dernière intervention 24 avril 2010 - 9 avril 2010 à 16:54
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 - 13 avril 2010 à 07:31
Bonjour,
Je suis entrain d'essayer un code dont l'exécution me parait très chelou.
J'affecte le retour d'une méthode dans une liste. Puis, j'ajoute un élément à cette dernière mais quand je fais un affichage des deux listes je remarque qu'elles sont différentes et que l'insertion n'est pas effectuée dans les deux sens. Normalement, par référence la modification d'un objet entraine la modification de l'autre.

Pourriez-vous m'aider à trouver l'erreur, merci :
            // Récupération d'un objet avec RMI

            IServeur Obj=(IServeur) Naming.lookup(url);
            
            List tabAnnonce=Obj.Fetch();
            System.out.println("Longeur du tabAnnonce :"+tabAnnonce.size());
            System.out.println("Longeur du vrai objet  :"+Obj.Fetch().size());
            
            Annonce c=new Annonce("T1","Titre 1");
            System.out.println(Obj.Add(c));
            
            System.out.println("Longeur du vrai objet  :"+Obj.Fetch().size());
            System.out.println("Longeur du tabAnnonce :"+tabAnnonce.size());


Voila le résultat d'exécution :


Connection au service...
Longeur du tabAnnonce :4
Longeur du vrai objet :4
Cette annonce existe déjà !
Longeur du vrai objet :4
Longeur du tabAnnonce :4

1 réponse

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
13 avril 2010 à 07:31
C'est assez simple en fait, normalement en java, comme tout passe par référence, quand on dit A=B et qu'on modifie B, on modifie alors A. Là dessus, tu as tout à fait raison.

Cependant, le résultat de ta méthode Obj.Fetch() n'est pas enregistré, il est recalculé à chaque appel. A chaque appel, tu as donc un enregistrement dans un nouvel espace mémoire. Et au final, ta liste n'est pas synchronisee avec le retour de Obj.Fetch().
0
Rejoignez-nous