Maison >développement back-end >C++ >Java transmet-il les paramètres par référence ou par valeur ?
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!