Liste chainée en java >.<

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)
Configuration: Windows XP
Safari 532.0

3 réponses

  1. 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 ?
    1
    1. 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);
      	}
      }
      1
      1. Merci beaucoup,
        j'ai très bien compris ton exemple !
        liste chainée par ce qu'en fait j'ai deux classe: listecomplexe qui contient des nombre complexe
        les nombre complexe j'ai representer avec la classe complexe
        je vais essayer avec l'idée que tu m'as dit et je vais voir.
        merci beaucoup
        1