Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1820 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Passage par référence

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Passage par référence

n°1889056
popotitagl​uck
Posté le 28-05-2009 à 16:23:58  profilanswer
 

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
mood
Publicité
Posté le 28-05-2009 à 16:23:58  profilanswer
 

n°1889073
popotitagl​uck
Posté le 28-05-2009 à 16:57:10  profilanswer
 

Une âme charitable ?

n°1889075
masklinn
í dag viðrar vel til loftárása
Posté le 28-05-2009 à 17:05:31  profilanswer
 

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
n°1889079
popotitagl​uck
Posté le 28-05-2009 à 17:13:53  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Passage par référence

 

Sujets relatifs
passage par référencepassage de l'intérieur d'un tableau par référence dans une fonction ?
[C --> C++] passage par référencePassage par référence
passage par reference ommissiblefonction avec passage par reference de variable
Question tout bête de passage par référencepassage par référence pour objets php [OK]
[VBA] Le passage de parametre par référence ne marche pas???[c++] Passage par référence d'un vector <>
Plus de sujets relatifs à : Passage par référence


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR