Maison >développement back-end >C++ >Java transmet-il les paramètres par référence ou par valeur, et comment pouvez-vous obtenir un comportement de type référence ?

Java transmet-il les paramètres par référence ou par valeur, et comment pouvez-vous obtenir un comportement de type référence ?

DDD
DDDoriginal
2024-12-29 18:44:141026parcourir

Does Java Pass Parameters by Reference or by Value, and How Can You Achieve Reference-Like Behavior?

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

Contrairement à la croyance populaire, Java ne prend pas en charge le passage de paramètres par référence de la même manière comme mot-clé ref de C#. Cependant, cette perception vient du fait que pour les paramètres de type référence, la référence elle-même est passée par valeur.

En Java, tous les paramètres sont passés par valeur. Lorsqu'un paramètre de type référence est transmis à une méthode, une copie de la référence est créée. Cela signifie que les modifications apportées à la référence au sein de la méthode n'affectent pas la référence en dehors de la méthode.

Pour illustrer cela, considérons l'exemple suivant :

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

private void mutate(Object o) { o = "Goodbye"; }

Le code ci-dessus affichera " Bonjour" à la console. Cela démontre que la référence o à l'intérieur de la méthode mutate n'est pas la même que la référence à l'extérieur de la méthode.

Si vous souhaitez modifier la référence elle-même, vous devez utilisez un paramètre de type de référence explicite, tel que java.util.concurrent.atomic.AtomicReference. Voici un exemple :

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, le paramètre ref est passé par référence, et la valeur de la référence est modifiée au sein de la méthode mutate. En conséquence, le code affichera « Au revoir ! » à la console.

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