159 votes

Je peux passer des paramètres par référence en Java ?

Je voudrais que la sémantique similaire à de ** ** mot clé.

249voto

oxbow_lakes Points 70013

Java est source de confusion, parce que tout ce qui est passé par valeur. Cependant, pour un paramètre de type de référence (c'est à dire pas un paramètre de type primitif) c'est la référence elle-même qui est passé par valeur, par conséquent, il semble être passé par référence (et souvent les gens disent qu'il est). Ce n'est pas le cas, comme indiqué par le texte suivant:

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

private void mutate(Object o) { o = "Goodbye"; } //NOT THE SAME o!

Imprime Hello à la console. Les options si vous voulez que le code ci-dessus pour imprimer Goodbye sont à utiliser une référence explicite comme suit:

AtomicReference<Object> ref = new AtomicReference<Object>("Hello");
mutate(ref);
System.out.println(ref.get()); //Goodbye!

private void mutate(AtomicReference<Object> ref) { ref.set("Goodbye"); }

68voto

PeterMmm Points 11099

Puis-je passer des paramètres par référence dans Java?

Pas de.

Pourquoi ? Java a un seul mode de passage d'arguments aux méthodes: par valeur.

Note:

Pour les primitives c'est facile à comprendre: vous obtenez une copie de la valeur.

Pour tous les autres, vous obtenez une copie de la référence, ce qui est appelé aussi le passage par valeur.

C'est dans cette image:

enter image description here

28voto

dfa Points 54490

En Java rien au niveau langage similaire au ref. En Java, il est seulement en passant par la valeur sémantique

Dans un souci de curiosité, vous pouvez implémenter une type Réf sémantique en Java encapsulant simplement vos objets dans une classe final :

test unitaire :

22voto

duffymo Points 188155

De James Gosling dans « Le langage de programmation Java » :

"... Il n’y a qu’un seul paramètre en passant de mode en Java - passage par valeur - et qui garde les choses simples. .."

11voto

Marc Gravell Points 482669

Je ne pense pas que vous pouvez. Votre meilleure option pourrait être d’encapsuler la chose que vous voulez passer « ref » sur une autre instance de la classe et passez la référence de la classe (externe) (en valeur). Si vous voyez ce que je veux dire...

c'est-à-dire votre méthode change l’état interne de l’objet, qu'il est passé, qui n’est alors visible à l’appelant.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X