Maison > développement back-end > C++ > Le paramètre Java transmet-il réellement une valeur transmise ou est-il plus nuancé ?

Le paramètre Java transmet-il réellement une valeur transmise ou est-il plus nuancé ?

Susan Sarandon
Libérer: 2025-01-02 22:04:40
original
582 Les gens l'ont consulté

Is Java's Parameter Passing Truly Pass-by-Value, or is it More Nuanced?

Transmission de paramètres Java : valeur par rapport à référence

En Java, la sémantique de transmission de paramètres diffère des langages comme C#, où le mot-clé "ref" indique explicitement le passage de référence.

Confusion entourant la référence Passage

La nature "passage par valeur" de Java déroute les développeurs car les paramètres des types référence (comme les objets) sont en fait passés par référence. Cependant, cette « référence » est simplement l'emplacement mémoire de l'objet, pas l'objet lui-même.

Démonstration du passage de valeur

Considérez l'extrait de code suivant :

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

private void mutate(Object o) { o = "Goodbye"; }
Copier après la connexion

Ce code affichera "Bonjour" sur la console car le paramètre "o" dans la méthode mutate fait en fait référence à une copie de l'original référence. L'attribution d'une nouvelle valeur à cette copie n'a aucun effet sur la valeur de l'objet d'origine.

Options alternatives de modification de référence

Pour modifier l'objet d'origine, il existe deux options :

  • Référence explicite : utilisez une classe wrapper de référence comme AtomicReference, comme indiqué ci-dessous :
AtomicReference<Object> ref = new AtomicReference<Object>("Hello");
mutate(ref);
System.out.println(ref.get()); // Goodbye!

private void mutate(AtomicReference<Object> ref) { ref.set("Goodbye"); }
Copier après la connexion
  • Méthodes Getter/Setter : En règle générale, il est recommandé d'utiliser les méthodes getter et setter pour modifier les propriétés des objets au lieu de直接修改引用. Cela garantit l'encapsulation et l'exactitude.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal