Maison >développement back-end >C++ >Java est-il un passage par valeur ou un passage par référence ?
En Java, tous les paramètres sont transmis par valeur, y compris les types de référence. Cela signifie que la valeur réelle de la référence, et non la référence elle-même, est transmise à la méthode. Cela peut prêter à confusion car il semble que les références soient transmises par référence car toute modification apportée à l'objet référencé par le paramètre sera reflétée dans l'objet d'origine.
Cependant, ce n'est pas un vrai comportement de passage par référence. . L'exemple suivant le démontre :
Object o = "Hello"; mutate(o); System.out.println(o); private void mutate(Object o) { o = "Goodbye"; } //NOT THE SAME o!
Après avoir exécuté ce code, le résultat sera "Bonjour". En effet, la méthode mutate reçoit une copie de la référence à l'objet d'origine, et non l'objet d'origine lui-même. Lorsque la ligne o = "Goodbye" est exécutée, elle modifie la variable de référence o à l'intérieur de la méthode mutate, mais n'affecte pas la variable o d'origine en dehors de la méthode.
Pour obtenir un véritable comportement de passage par référence, une option consiste à utiliser une référence explicite comme suit :
AtomicReference<Object> ref = new AtomicReference<>("Hello"); mutate(ref); System.out.println(ref.get()); //Goodbye! private void mutate(AtomicReference<Object> ref) { ref.set("Goodbye"); }
Dans ce cas, le wrapper AtomicReference contient une référence à l'objet d'origine. Lorsque la méthode mutate reçoit le paramètre ref, elle a un accès direct à l'objet d'origine et toutes les modifications apportées à l'objet seront reflétées dans l'objet d'origine en dehors de la méthode.
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!