Distinction Java « Passer par valeur » et « Passer par référence »
En Java, les variables stockent des références à des objets, pas aux objets eux-mêmes. Cette distinction affecte la façon dont les objets sont passés en tant qu'arguments aux méthodes.
Scénario A : Passer une référence
Considérez l'extrait de code suivant :
Foo myFoo; myFoo = createFoo(); public Foo createFoo() { Foo foo = new Foo(); return foo; }
Lorsque myFoo reçoit le résultat de createFoo(), un nouvel objet Foo est créé et attribué à foo. La variable de référence myFoo pointe désormais vers ce nouvel objet. Si myFoo est modifié par la suite, les modifications affecteront l'objet Foo d'origine. Cependant, si une nouvelle variable de référence est affectée à myFoo, elle pointera vers un objet différent.
Scénario B : Passer une valeur
Comparez cela avec ce qui suit :
Foo myFoo; createFoo(myFoo); public void createFoo(Foo foo) { Foo f = new Foo(); foo = f; }
Dans ce cas, la méthode createFoo() reçoit une référence à myFoo. Cependant, au sein de la méthode, un nouvel objet Foo est créé et affecté à une variable de référence locale f. La ligne foo = f modifie uniquement la référence dans la méthode, pas la référence stockée dans la méthode appelante. Par conséquent, toute modification apportée à foo dans la méthode ne sera pas reflétée dans l'objet Foo d'origine.
Conclusion
Sur la base de ces exemples, il est évident que Java passe toujours arguments par valeur, pas par référence. La valeur transmise est une référence à l'objet, pas à l'objet lui-même. Par conséquent, les modifications apportées aux variables de référence dans les méthodes n'affectent pas les objets d'origine. Cependant, les modifications apportées à l'objet lui-même via la référence seront reflétées dans l'objet d'origine.
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!