Liste chainée en java >.<
otakuu
Messages postés
331
Statut
Membre
-
otakuu Messages postés 331 Statut Membre -
otakuu Messages postés 331 Statut Membre -
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 >.<
- Jeux java itel - Télécharger - Jeux vidéo
- Liste déroulante excel - Guide
- Waptrick java football - Télécharger - Jeux vidéo
- Liste déroulante en cascade - Guide
- Waptrick java voiture - Télécharger - Jeux vidéo
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);
}
}