Egalités d'objets (EXO4 TP sur les classes)

Modérateurs : F. Barthélemy, eric.soutil

Verrouillé
achabe
Messages : 21
Inscription : 20 oct. 2016 18:09

Egalités d'objets (EXO4 TP sur les classes)

Message par achabe » 20 oct. 2016 18:17

Bonjour,

Il m'a semblé avoir bien compris la problématique de cet exercice. Mais après avoir légèrement modifié le programme, comme ci-dessous, je ne comprends pas pourquoi le 3ème test donne l'égalité des valeurs et des objets ! Pouvez-vous m'expliquer svp ?

Code : Tout sélectionner

class Exo4{
	public static void main(String[] argv){
		Compteur c1, c2, c3;
		c1 = new Compteur(0);
		c1.incremente();
		c2 = new Compteur(1);

		/*1er test*/
		if (c1.value() == c2.value()){
			Terminal.ecrireStringln("c1 et c2 ont meme valeur");
		}else{
			Terminal.ecrireStringln("c1 et c2 n’ont pas la meme valeur");
		}
		if (c1 == c2){
			Terminal.ecrireStringln("c1 et c2 sont egaux");
		}else{
			Terminal.ecrireStringln("c1 et c2 ne sont pas egaux");
		}
		
		/*2ème test*/
		c2 = c1;
		if (c1.value() == c2.value()){
			Terminal.ecrireStringln("c1 et c2 ont meme valeur");
		}else{
			Terminal.ecrireStringln("c1 et c2 n’ont pas la meme valeur");
		}
		if (c1 == c2){
			Terminal.ecrireStringln("c1 et c2 sont egaux");
		}else{
			Terminal.ecrireStringln("c1 et c2 ne sont pas egaux");
		}
		
		/*3ème test*/
		c2.incremente();
		if (c1.value() == c2.value()){
			Terminal.ecrireStringln("c1 et c2 ont meme valeur");
		}else{
			Terminal.ecrireStringln("c1 et c2 n’ont pas la meme valeur");
		}
		if (c1 == c2){
			Terminal.ecrireStringln("c1 et c2 sont egaux");
		}else{
			Terminal.ecrireStringln("c1 et c2 ne sont pas egaux");
		}
	}
}
Terminal :

Code : Tout sélectionner

  >java Exo4
c1 et c2 ont meme valeur
c1 et c2 ne sont pas egaux
c1 et c2 ont meme valeur
c1 et c2 sont egaux
c1 et c2 ont meme valeur
c1 et c2 sont egaux

eric.soutil
Messages : 16
Inscription : 21 oct. 2016 17:47

Re: Egalités d'objets (EXO4 TP sur les classes)

Message par eric.soutil » 21 oct. 2016 17:54

Question : "pourquoi le 3ème test donne l'égalité des valeurs et des objets ! Pouvez-vous m'expliquer svp ?"

Réponse : avant le 2ème test, on a exécuté l'instruction : c2 = c1;
Cela implique que les variables c1 et c2 contiennent toutes les deux la référence (l'adresse) du même objet. Autrement dit, on dispose de deux variables (c1 et c2) pour accéder au même objet. Lorsqu'on exécute avant le 3ème test l'instruction :

c2.incremente();

... la valeur de l'objet est augmentée de 1, mais l'objet reste référencé à la fois par c1 et par c2 qui contiennent toujours l'adresse en mémoire (la référence) de l'objet.
Il est donc normal que le troisième test indique toujours l'égalité des valeurs (c1 et c2 ont meme valeur) et des références (c1 et c2 sont egaux).

E. Soutil (enseignant FOD NFA032)

achabe
Messages : 21
Inscription : 20 oct. 2016 18:09

Re: Egalités d'objets (EXO4 TP sur les classes)

Message par achabe » 22 oct. 2016 14:37

Merci pour votre réponse.
Autrement dit, en écrivant avant le test 2 : c2 = c1, je perds toute référence à l'objet déclaré par
Compteur c2;
et initialisé par
c2 = new Compteur(1); ??
Je ne peux plus y avoir accès dans mon programme c'est cela ?

eric.soutil
Messages : 16
Inscription : 21 oct. 2016 17:47

Re: Egalités d'objets (EXO4 TP sur les classes)

Message par eric.soutil » 24 oct. 2016 17:47

Autrement dit, en écrivant avant le test 2 : c2 = c1, je perds toute référence à l'objet déclaré par
Compteur c2;
et initialisé par
c2 = new Compteur(1); ??
Je ne peux plus y avoir accès dans mon programme c'est cela ?
C'est exact. l'objet en question n'est plus référencé, il n'est donc plus possible d'y accéder et l'espace mémoire sera
récupéré par le ramasse-miettes.

achabe
Messages : 21
Inscription : 20 oct. 2016 18:09

Re: Egalités d'objets (EXO4 TP sur les classes)

Message par achabe » 24 oct. 2016 19:36

Merci, j'y vois déjà un peu plus clair :)

Verrouillé

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité