Maison >Java >javaDidacticiel >Java transmet-il les objets par valeur ou par référence ?

Java transmet-il les objets par valeur ou par référence ?

DDD
DDDoriginal
2024-11-16 16:17:02422parcourir

Does Java Pass Objects by Value or by Reference?

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!

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