J'ai cette méthode de varargs simple qui divise chaque élément de la liste:
$ javac B.java && java B [Ljava.lang.Object;@1242719c [Ljava.lang.Object;@4830c221
4 Réponses :
En fin de compte, un tableau est un objet, vous ne modifiez donc pas la référence de la matrice elle-même à la place de son contenu qui est autorisé. P>
Oui, mais il modifie le contenu d'un tableau différent. Et ce sont des primitives, qui n'ont pas de références.
@ F1SH OP modifier les valeurs de la matrice dans la méthode. Ainsi, après l'avoir appelé sur la matrice, son contenu sera modifié.
On dirait que vous vous êtes trompé ici:
Object[] os = new Object[]{1,2,3}; System.out.println(os); f(os);
+1 bonne prise. Il convient de mentionner que la méthode de Varargs est exactement i> la même chose qu'une méthode équivalente qui prend un paramètre de tableau, sauf que lorsque vous passez plusieurs arguments à la méthode Varargs, un tableau est créé pour vous.
varargs est em> un type de tableau, mais avec du sucre syntaxique pour permettre une création de matrice à volée si des éléments sont transmis séparément en tant que paramètres. C'est-à-dire que ces deux signatures sont identiques: p> sauf que les varargs peuvent être appelées avec des éléments distincts au lieu d'un tableau p> bien sûr que la matrice sera modifiée si vous contournez le -fly création et créer un tableau vous-même pour passer. P> P>
Alors, comment alors F dans une modification du tableau de l'appelant au lieu de sa propre copie? P> blockQuote>
Cela n'a pas sa propre copie. Il a une référence à la matrice de l'appelant. P>
Java copie des références par valeur. Il n'appopine ni n'expose ni n'excuse les objets ni les tableaux comme arguments (ni aucune autre situation) sauf si vous le faites explicitement.