Ha ?
Objectivement, j‘ai quand même l’impression que c’est toi qui raconte nawak...
Le passage par valeur implique une copie dans des registres.
Qu’est ce que les registres viennent foutre dans la définition de pass-by-value.
Source ? Ou c’est une définition de derrière les fagots ?
Java ne fait pas de copie à chaque appel de méthode sur un objet, et heureusement !
si, Java fait une copie : il copie la référence.
Il passe la référence par valeur. Il ne passe pas par référence. Nuance...
Dans l‘exemple que tu cites, aDog est une référence sur un objet Dog (car Java manipule des références sur les objets, il est ainsi fait).
Quand tu appelles la fonction foo, c’est bien une copie de aDog qui est envoyé, pas une référence sur aDog.
J‘appelle foo(aDog), la fonction reçoit la valeur (une copie) de aDog => passage par valeur.
En revanche en C++, si j’ai une fonction :
void foo(Dog& d)
Quand je l’appelle
Dog aDog;
foo(aDog);
Je ne passe pas une copie de aDog, mais son adresse.
J‘appelle foo(aDog), la fonction reçoit l’adresse de aDog => passage par référence.
Que les valeurs que Java passe soit des références sur un truc ne change pas le fait que sémantiquement c’est un passage par valeur, pas un passage par référence comme il existe en C++ par exemple (j’appelle avec A, la fonction reçoit une référence sur A).
[^] # Re: Evite le C++
Posté par grim7reaper . En réponse au journal C(++) ?. Évalué à -1.
Ha ?
Objectivement, j‘ai quand même l’impression que c’est toi qui raconte nawak...
Qu’est ce que les registres viennent foutre dans la définition de pass-by-value.
Source ? Ou c’est une définition de derrière les fagots ?
Dans l‘exemple que tu cites, aDog est une référence sur un objet Dog (car Java manipule des références sur les objets, il est ainsi fait).
Quand tu appelles la fonction foo, c’est bien une copie de aDog qui est envoyé, pas une référence sur aDog.
J‘appelle foo(aDog), la fonction reçoit la valeur (une copie) de aDog => passage par valeur.
En revanche en C++, si j’ai une fonction :
Quand je l’appelle
Je ne passe pas une copie de aDog, mais son adresse.
J‘appelle foo(aDog), la fonction reçoit l’adresse de aDog => passage par référence.
Que les valeurs que Java passe soit des références sur un truc ne change pas le fait que sémantiquement c’est un passage par valeur, pas un passage par référence comme il existe en C++ par exemple (j’appelle avec A, la fonction reçoit une référence sur A).