Comment utiliser des références en Java?
Je veux utiliser une référence en Java mais je ne sais pas comment!
par exemple en C++ nous écrire:
void sum(int& x)
{
...
}
mais en Java & signe est une erreur de compilation!
s'il vous plaît aidez-moi à comprendre les références en Java.
- C'est pourquoi nous avons modérateur pouvoirs, je suppose.
- stackoverflow.com/questions/40480/is-java-pass-by-reference voir le post ci-dessus
- sauf que vous n'êtes pas censé modifier les messages uniquement pour apporter de légères corrections cosmétiques (comme la correction d'une faute de frappe). Je trouve ça déprimant que @skaffman posté son commentaire dans "ton" et que les 6 plus les gens ont voté comme utile.
- En fait je ne me souviens avoir lu le contraire de ce que vous venez de dire du blog officiel et méta plusieurs fois. Comme je le vois, corrections de fautes de frappe et de grammaire est approuvé depuis parfois il rend la compréhension de la question elle-même beaucoup plus facile pour les autres.
- vous avez raison, mais maintenant je suis plus déprimé.
- double possible de Java passage par référence?
Vous devez vous connecter pour publier un commentaire.
les Objets sont passés par référence par défautObjets sont accessible par référence, mais il n'y a aucun moyen de créer une référence à une valeur primitive (byte, short,int, long). Vous devez créer un objet à envelopper l'entier ou de l'utilisation d'un seul élément de tableau.ou
pour votre exemple, quelque chose comme ce qui suit pourrait travailler
ou
Mise à jour:
Supplémentaires/Meilleure description de références de l'objet:
Objets Java sont toujours accessibles par une référence. Comme les types primitifs cette référence est passée par valeur (copie). Depuis tout un programmeur peut accéder en java est passé par copie (références, primitives) et il n'y a aucun moyen de créer une référence à un type primitif, toute modification d'un paramètre de méthode (références, primitives) n'affecte que la copie locale à l'intérieur de la méthode.
Les objets peuvent être modifiés à l'intérieur d'une méthode, car les deux copies de la référence (locaux et autres) continuent à pointer vers la même instance d'objet.
exemple:
Modifier une primitive dans la méthode, cela n'affecte que la copie interne de je et non pas à la valeur passée.
Modifier une référence dans la méthode, cela n'affecte que la copie interne de ref et non pas à la valeur passée.
Modifier un objet, visible à l'échelle mondiale
Le tableau et MyInt ci-dessus sont basés sur la modification d'un objet.
Ordinaire Java paramètre est déjà plus proche d'une référence C++ que le C++ passer par valeur ou par pointeur. Alors, tous à vos méthodes de Java sont déjà comme ça.
int et d'autres primitives sont particulières en Java, cependant; le ci-dessus est vrai pour les références de l'objet.
Edit: Plus précisément, comme l'a indiqué @fatih, tous Java invocations sont passé par valeur. Toutefois, lorsque vous passez un objet que vous passez une référence par la valeur. Donc, en première approximation, la déclaration ci-dessus est correcte: ordinaire Java paramètre est plus semblable à une référence C++ que le C++ passer par valeur ou par pointeur.
Lecture obligatoire sur la compréhension de Java Passage Par Valeur sémantique:
http://www.javaworld.com/javaworld/javaqa/2000-05/03-qa-0526-pass.html
http://javadude.com/articles/passbyvalue.htm
http://javachannel.net/wiki/pmwiki.php/FAQ/PassingVariables (des liens vers plusieurs autres pages)
Supprimer complètement la notion à partir de votre tête que Java peut avoir quelque chose de passé par référence. Prenons un exemple, allons-nous?
f = new Foo()
? Ma conjecture est que vous aurez 99 imprimés, pas 0.La
MutableInt
classe dans Apache Commons faire ce que vous voulez, même si c'est pas joli.MutableInt
Classes supplémentaires sont prévues pour les autres types primitifs, et également pour les objets.
Il ya des coûts impliqués dans la création d'un objet supplémentaire simplement à fournir un cadre de référence, de sorte que la solution n'est pas optimale, mais dans la plupart des cas vous devriez être ok.
En général, il est toujours préférable de trouver un moyen de renvoyer un résultat à partir d'une méthode. Malheureusement, Java ne permet qu'une seule valeur de retour dans cette voie.