Bonjour,
Qu'est ce que la transmission d'objet par valeur? Auriez vous des exemple.
Et quelle est la difference avec la transmission par reference?
Merci
Bonjour,
Qu'est ce que la transmission d'objet par valeur? Auriez vous des exemple.
Et quelle est la difference avec la transmission par reference?
Merci
hocine
la transmission d'objet par valeur est un concept où la méthode reçois une copie de la donnée d'origine, plutot qu'une référence. Exemple:
En java, tous les types primitifs sont passé par valeur (parce que c'est facile à faire ) et tous les autres types sont passés par références (parce que ce serait trop lourd de cloner à chaque fois, et à limiterais fortement la souplesse du code). Il n'y a pas moyen de changer ce comportement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 public void test(int x){ x=13; } .... a = 69; test(a); System.out.println(a); // affiche 69 et non 13, car test a modifié une copie de a
Exemple de passage par références:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 public void test(List l){ l.add("test"); } .... List list = new ArrayList(); list.add("1"); test(list); System.out.println(list.size()); // affiche 2, car l contient maintenant "1" et "test"
Salut,
En Java TOUT est passé par copie !
La nuance vient du fait que l'on ne passe jamais d'objet mais des références, donc pour les objets cela revient à faire une copie de la référence...
Mais ce n'est pas une vrai copie par référence comme on peut l'avoir en C++
Avec un passage par référence on pourrait faire quelque chose comme cela :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 public void init(Object obj) { obj = "Hello World !"; }a++
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Object monObjet = null; init(monObjet); // monObjet serait initialisé ici
En réalité java ne fonctionne que par "passage de paramêtre par valeur".
A la subtilité prêt que ce sont les variables qui sont copiées par valeur et non les objets.
Exemple:
Résultat:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 public void static main() ( String[] args ) { String a = "'mon objet"; swap( a ); System.out.println(a); } public void static swap( String a ) { a = "petit changement"; }
mon objet
Lors de l'appel de swap(...) la variable a à été copiée lors du passage de paramêtre. la variable a de la méthode swap est donc une copie contenant donc la reference vers le même objet que l'appelant.
En affectant une nouvelle reference à sa variable, puisqu'il s'agit d'une copie, cela n'affecte en rien la variable de l'appelant.
Java ne fait pas de difference enter passer un type primitif ou un objet, il copie le contenu de la variable (a savoir la valeur du type primitif ou la reference sur un objet)
EDIT: grillé (et pas de 5 minutes.... c'est ca quand on délaisse son PC sans envoyer son message...)
JBusyComponent, une API pour rendre occupé un composant swing.
SCJP Java 6.0 (90% pass score)
oui, me suis très mal exprimé Merci d'avoir corrigé.
(je vais me flageler avec des orties fraîches et je reviens)
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager