Dans la suite, vous allez avoir à manipuler des pointeurs sur des structures. Du coup c’est extrêmement simple car
dans Java toutes les soitdisant structures sont en fait des objets jusqu’à présent volontairement tronqués de la
plupart de leurs fonctionnalités. Or comme tout objet, la variable qui reçoit un objet en reçoit une référence. Vous
avez déjà utilisé ce principe sans le savoir, toujours dans le chapitre Les tableaux et structures, avec les structures
tfabricant et tarticle.
Cet exemple est bien plus intéressant qu’il n’y paraît, vous le voyez probablement maintenant avec un oeil neuf,
puisque chaque déclaration d’une variable enregistrement de ces types est en fait une référence sur
l’enregistrement :
q article est une référence sur une structure (un objet) de type tarticle.
q article contenant une variable de type tfabricant, on crée dedans une référence fab sur un objet de ce type.
q art2 de type tarticle reçoit la référence de article. Ils référencent le même enregistrement.
q Le contenu des champs de art2 est affiché, c’est du coup le même que article. Si vous modifiez les champs, la
modification se répercute sur toutes les références sur cet enregistrement : c’est le même pour tous.
class tfabricant {
public String ref;
public String nom;
public String adresse;
public String tel;
}
class tarticle {
public String ref;
public String libelle;
public float prix;
public tfabricant fab;
}
class chap8_refstruct {
public static void main(String[] args) {
tarticle article=new tarticle();
tarticle art2 ;
article.ref="Art001_01";
article.fab=new tfabricant();
article.fab.ref="Fab1234";
art2=article ;
System.out.println(art2.ref);
System.out.println(art2.fab.ref);
}
}
e. Le piège en Java
En Java il faut faire très attention : quand vous passez une référence en paramètre vous pouvez modifier le contenu
de la référence et ce contenu sera modifié directement dans la zone mémoire, c’est parfait. Mais vous ne pouvez pas
modifier la référence ellemême ! Si modifiez au sein d’une méthode la valeur de la référence ellemême, elle retrouve
sa valeur initiale en sortie. Par exemple :
static void modif(element p1,element p2) {
p1=p2;
}
Si dans le programme principal vous avez :
p1=new element();
p2=new element();
p1.valeur=10;
p2.valeur=15;
modif(p1,p2) ;
System.out.println(p1.valeur) ;
La sortie sera 10 ! En effet dans la méthode modif(), p1 contient bien la référence vers l’emplacement mémoire de
l’objet p1, mais la variable p1 est ellemême locale à la méthode ! Donc en affectant p2 à p1, p1 reçoit la référence de
- 10 -
© ENI Editions - All rigths reserved - Jonifar lina
172
dans Java toutes les soitdisant structures sont en fait des objets jusqu’à présent volontairement tronqués de la
plupart de leurs fonctionnalités. Or comme tout objet, la variable qui reçoit un objet en reçoit une référence. Vous
avez déjà utilisé ce principe sans le savoir, toujours dans le chapitre Les tableaux et structures, avec les structures
tfabricant et tarticle.
Cet exemple est bien plus intéressant qu’il n’y paraît, vous le voyez probablement maintenant avec un oeil neuf,
puisque chaque déclaration d’une variable enregistrement de ces types est en fait une référence sur
l’enregistrement :
q article est une référence sur une structure (un objet) de type tarticle.
q article contenant une variable de type tfabricant, on crée dedans une référence fab sur un objet de ce type.
q art2 de type tarticle reçoit la référence de article. Ils référencent le même enregistrement.
q Le contenu des champs de art2 est affiché, c’est du coup le même que article. Si vous modifiez les champs, la
modification se répercute sur toutes les références sur cet enregistrement : c’est le même pour tous.
class tfabricant {
public String ref;
public String nom;
public String adresse;
public String tel;
}
class tarticle {
public String ref;
public String libelle;
public float prix;
public tfabricant fab;
}
class chap8_refstruct {
public static void main(String[] args) {
tarticle article=new tarticle();
tarticle art2 ;
article.ref="Art001_01";
article.fab=new tfabricant();
article.fab.ref="Fab1234";
art2=article ;
System.out.println(art2.ref);
System.out.println(art2.fab.ref);
}
}
e. Le piège en Java
En Java il faut faire très attention : quand vous passez une référence en paramètre vous pouvez modifier le contenu
de la référence et ce contenu sera modifié directement dans la zone mémoire, c’est parfait. Mais vous ne pouvez pas
modifier la référence ellemême ! Si modifiez au sein d’une méthode la valeur de la référence ellemême, elle retrouve
sa valeur initiale en sortie. Par exemple :
static void modif(element p1,element p2) {
p1=p2;
}
Si dans le programme principal vous avez :
p1=new element();
p2=new element();
p1.valeur=10;
p2.valeur=15;
modif(p1,p2) ;
System.out.println(p1.valeur) ;
La sortie sera 10 ! En effet dans la méthode modif(), p1 contient bien la référence vers l’emplacement mémoire de
l’objet p1, mais la variable p1 est ellemême locale à la méthode ! Donc en affectant p2 à p1, p1 reçoit la référence de
- 10 -
© ENI Editions - All rigths reserved - Jonifar lina
172
