Je voudrais que la sémantique similaire à de **
** mot clé.
Réponses
Trop de publicités?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"); }
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:
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.