Passage par référence

Passage par référence - Java - Programmation

Marsh Posté le 28-05-2009 à 16:23:58    

Hello,
 
J'essaie de comprendre le pourquoi du comment depuis un petit moment mais je ne parvient pas à avoir une idée claire de la situation:
 
J'ai deux petits bouts de code:
 

Code :
  1. public static void main(String[] args) {
  2. int[] tab = {1};
  3. m(tab);
  4. System.out.println(" tab[0]= " + tab[0]);
  5. }
  6. static void m(int[] x) {
  7. x[0] = 100;
  8. System.out.print("x[0]= " + x[0]);
  9. }
  10. qui affiche x[0]= 100 tab[0]= 100


 
et l'autre
 

Code :
  1. public static void main(String[] args) {
  2. int[] tab = {1};
  3. m(tab);
  4. System.out.println(" tab[0]= " + tab[0]);
  5. }
  6. static void m(int[] x) {
  7. int[] t = {100};
  8. x = t;
  9. System.out.print("x[0]= " + x[0]);
  10. }
  11. qui affiche x[0]= 100 tab[0]= 1


 
 
Je ne comprend pas pourquoi dans le deuxième code, tab[0] affiche 1 et non pas 100
 
Merci
 
Bastien


Message édité par popotitagluck le 28-05-2009 à 16:24:26
Reply

Marsh Posté le 28-05-2009 à 16:23:58   

Reply

Marsh Posté le 28-05-2009 à 16:57:10    

Une âme charitable ?

Reply

Marsh Posté le 28-05-2009 à 17:05:31    

Parce qu'en Java (comme dans la majorité des langages avec GC) les arguments sont passés par valeurs de référence (*) (par nom, si tu préfères), pas par référence au sens C++. Ou alors ce passage par référence est spécifié en faisant du paramètre un "out parameter" (possible en C# par exemple), mais Java n'a pas ce concept (à la con, de toute façon)

 

Donc tab dans ton main et x dans ta fonction sont deux références différentes pointant sur le même objet. Et donc rebinder x sur un nouvel objet n'a strictement aucune influence sur tab.

 

(*):

Citation :

A common misconception exists that parameters in Java are passed by reference. They are not. Parameters are passed by value. The misconception arises from the fact that all apparent object variables are really object references. This leads to some unexpected results if you do not understand exactly what is happening.


Message édité par masklinn le 28-05-2009 à 17:14:12

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 28-05-2009 à 17:13:53    

Ok je comprend mieux comment fonctionne le langage sur ce coup,
merci Masklinn =)

Reply

Sujets relatifs:

Leave a Replay

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