références

références - Java - Programmation

Marsh Posté le 09-03-2013 à 12:52:25    

Bonjour,
scusez.
La question est vraiment bete. Je voudrais savoir pourquoi java se comporte comme ça?
 
J'ai un premier objet:

Code :
  1. public class obj {
  2.    int a=0;
  3.    public void display()
  4.    {
  5.       System.out.println(a);
  6.    }
  7. }


 
Un deuxième objet, conteneur

Code :
  1. public class conteneur {
  2. private obj input;
  3. public void setInput(obj input)
  4. {
  5. this.input=input;
  6. }
  7. public obj getInput(){
  8. return input;
  9. }
  10. }


 
 
Cas d'utilisation:

Code :
  1. obj maclasse1 = new obj();
  2.  conteneur monC = new conteneur();
  3.  monC.setInput(maclasse1);
  4.  obj maclasse2 = new obj();
  5.  maclasse2.a=1;
  6.  maclasse1=maclasse2;
  7.  maclasse1.display();
  8.  monC.getInput().display();


 
Pourquoi est-ce que dans le premier cas, ça affiche 1 (c'est une référence, et je m'attends au résultat) et dans le cas conteneur ça affiche zéro? Quelle est la règle?

Reply

Marsh Posté le 09-03-2013 à 12:52:25   

Reply

Marsh Posté le 10-03-2013 à 15:55:18    

Code :
  1. 1)  obj maclasse1 = new obj();
  2.    2)  conteneur monC = new conteneur();
  3.    3)  monC.setInput(maclasse1);
  4.    4)  obj maclasse2 = new obj();
  5.    5) maclasse2.a=1;
  6.    6)   maclasse1=maclasse2;
  7.    7)  maclasse1.display();
  8.    8)  monC.getInput().display();


 
http://img11.hostingpics.net/pics/636535Sansnom1.png


Message édité par Anonymouse le 10-03-2013 à 15:58:52
Reply

Marsh Posté le 10-03-2013 à 18:11:14    

merci, tu t'es donné du mal :-)
Ce que je ne comprends pas.
En terme de pointeurs C, je m'attendrais à :
 
input pointe sur maclasse1 et comme maclasse1 je viens de dire qu'elle pointe sur maclasse2 on aurait du avoir différent de zéro. Et en plus c'est ce que tu écris à la ligne 6 :-)
 
J'ai l'impression qu'il me manque une notion qui a l'air typique java. Je ne viens pas de java, il y a un truc qui me choque
 
Pourquoi maclasse1 pointe sur l'objet mclasse2, alors que input l'a copié? Pourquoi input fait une copie?

Message cité 1 fois
Message édité par antiseptiqueincolore le 10-03-2013 à 18:14:02
Reply

Marsh Posté le 10-03-2013 à 20:03:06    

antiseptiqueincolore a écrit :

merci, tu t'es donné du mal :-)
Ce que je ne comprends pas.
En terme de pointeurs C, je m'attendrais à :
 
input pointe sur maclasse1 et comme maclasse1 je viens de dire qu'elle pointe sur maclasse2 on aurait du avoir différent de zéro. Et en plus c'est ce que tu écris à la ligne 6 :-)
 
Non input pointe sur l'objet pointé par maclasse1. On manipule des "obj*" comme en C
 
J'ai l'impression qu'il me manque une notion qui a l'air typique java. Je ne viens pas de java, il y a un truc qui me choque
 
Pourquoi maclasse1 pointe sur l'objet mclasse2, alors que input l'a copié? Pourquoi input fait une copie?
 
a) Les paramètres passés en java à des méthodes sont toujours passés par copie, comme en C pour les fonctions.
b) Les objets manipulés en java sont toujours manipulé par des références.
 
Input ne fait pas une copie de l'objet il fait une copie de la référence maclasse1.
maclasse1 pointe sur ma classe2 car en faisant maclasse1 = maclasse2 on copie la référence maclasse2 dans maclasse1.
 


Message édité par Anonymouse le 10-03-2013 à 20:11:32
Reply

Marsh Posté le 10-03-2013 à 20:36:11    

ok  :jap:  
je vais essayer de voir les choses comme ça  

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed