Liste chainée en java >.<
otakuu
Messages postés
302
Date d'inscription
Statut
Membre
Dernière intervention
-
otakuu Messages postés 302 Date d'inscription Statut Membre Dernière intervention -
otakuu Messages postés 302 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
j'ai definit une classe complexe
j'ai creer un objet "com" de type complexe
et un autre objet "com2" de type complexe
j'ai fait : com2 = com;
apès j'ai manipuler "com2" (j'ai changé les valeurs) et j'étais surpris de voir que les changement sont appliquer à "com" aussi.
mes questions:
est ce que c'est normal? si oui comment remédier a ce problème ?sinon pour quoi "com" est modifier alors que j'ai pas toucher.
merci infiniment pour vos réponses ( sa fait 3 jours que sa me casse la tete :s)
j'ai definit une classe complexe
j'ai creer un objet "com" de type complexe
et un autre objet "com2" de type complexe
j'ai fait : com2 = com;
apès j'ai manipuler "com2" (j'ai changé les valeurs) et j'étais surpris de voir que les changement sont appliquer à "com" aussi.
mes questions:
est ce que c'est normal? si oui comment remédier a ce problème ?sinon pour quoi "com" est modifier alors que j'ai pas toucher.
merci infiniment pour vos réponses ( sa fait 3 jours que sa me casse la tete :s)
A voir également:
- Liste chainée en java >.<
- Liste déroulante excel - Guide
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Liste déroulante en cascade - Guide
- Eclipse java - Télécharger - Langages
3 réponses
les noms de variable objet, ce sont des références vers un objet.
Lorsque tu écris com2 = com, tu dis maintenant que la variable com2 va "pointer" vers le même objet que com.
C'est donc tout à fait normal.
Si tu veux y remedier : crée un constructeur de copie pour ta classe : Complexe(Complexe obj) qui se charge de bêtement copier les variables membres (x = obj.x; ...)
Ainsi tu pourras faire com2 = new Complexe(com) pour que com2 se réfère bien à un objet différent, mais avec les mêmes valeurs.
sinon quel est le lien avec les liste chainées dont tu parles dans le titre ?
Lorsque tu écris com2 = com, tu dis maintenant que la variable com2 va "pointer" vers le même objet que com.
C'est donc tout à fait normal.
Si tu veux y remedier : crée un constructeur de copie pour ta classe : Complexe(Complexe obj) qui se charge de bêtement copier les variables membres (x = obj.x; ...)
Ainsi tu pourras faire com2 = new Complexe(com) pour que com2 se réfère bien à un objet différent, mais avec les mêmes valeurs.
sinon quel est le lien avec les liste chainées dont tu parles dans le titre ?
voici un exemple en code pour illustrer ce que je dis :
public class TestSimple { public static void main(String[] args) { Complexe com, com2; com = new Complexe(); com.x=1; com.y=2; com2 = new Complexe(); com2.x=3; com2.y=4; System.out.printf("com = %s com2 = %s", com, com2); com2 = com; // après cette ligne il n'y a plus qu'un objet //l'ancien com2 est en fait détruit. // si je change le com2 com2.y= 5; System.out.printf("com = %s com2 = %s", com, com2); //ou si je change com, c'est en fait le meme objet qui est modifié com.x=6; System.out.printf("com = %s com2 = %s", com, com2); //par contre ici j'ai bien 2 objets indépendants Complexe com3 = new Complexe(com); System.out.printf("com = %s com3 = %s", com, com3); com3.x=200; System.out.printf("com = %s com3 = %s", com, com3); } }
public class Complexe { public int x, y; public Complexe(complexe obj) { x = obj.x; y = obj.y; } public Complexe() { } public String toString() { return Integer.toString(x) + " + i*" + Integer.toString(y); } }