Maison >développement back-end >C++ >Java transmet-il les paramètres par référence ou par valeur ?

Java transmet-il les paramètres par référence ou par valeur ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-30 14:45:16446parcourir

Does Java Pass Parameters by Reference or by Value?

Passer des paramètres par référence en Java

En Java, chaque paramètre est passé par valeur, ce qui peut sembler contre-intuitif, surtout si vous êtes provenant de langages comme C# qui prennent en charge le passage par référence. Cependant, la sémantique est légèrement différente sous le capot.

Comment Java gère les types de référence

Pour les paramètres de type référence (tels que les objets), Java transmet la référence lui-même en valeur. Par conséquent, il semble qu'il s'agisse d'un passage par référence, car les affectations au sein de la méthode affectent la référence en dehors de la méthode.

Cependant, il est important de noter que la référence transmise n'est pas la même que la référence utilisée dans le méthode d'appel.

Preuve de passage par valeur

Considérez ce qui suit exemple :

Object o = "Hello";
mutate(o);
System.out.println(o);

private void mutate(Object o) { o = "Goodbye"; } //NOT THE SAME o!

Ce code affiche "Bonjour" sur la console, même si la méthode mutate() tente de modifier la référence o en "Au revoir". Cela démontre que la référence transmise à mutate() n'est pas la même que la référence o originale, prenant en charge la sémantique de transmission par valeur.

Options pour le véritable passage de référence

Pour obtenir un véritable comportement de passage par référence, vous pouvez utiliser l'approche suivante :

AtomicReference<Object> ref = new AtomicReference<Object>("Hello");
mutate(ref);
System.out.println(ref.get()); //Goodbye!

private void mutate(AtomicReference<Object> ref) { ref.set("Goodbye"); }

Dans ce cas, l'AtomicReference fournit un wrapper autour de l'objet et sa référence est véritablement transmise par valeur. Les affectations à la référence dans mutate() affecteront la référence en dehors de la méthode, entraînant le comportement de passage par référence souhaité.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn