Puis-je modifier l'objet String valeur passée à ma méthode?
J'ai trouvé la question suivante Est Java "par référence" ou de "passage par valeur"?.
J'ai presque tout lu de lui, mais ne pouvait pas savoir encore ce que je dois faire si je veux le foo(-)
méthode, à modifier mon String
's valeur? (peut-être ou pas de référence de trop, il n'est pas question pour moi).
void foo(String errorText){
errorText="bla bla";
}
int main(){
String error="initial";
foo(error);
System.out.println(error);
}
Je veux voir bla bla
sur la console. Est-il possible?
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas modifier la valeur de
errorText
dansfoo
que la méthode est déclarée. Même si vous êtes de passage à une référence de la ChaîneerrorText
enfoo
, JavaString
s sont immuables-vous ne pouvez pas les modifier.Cependant, vous pouvez utiliser un
StringBuffer
(ouStringBuilder
). Ces classes peuvent être modifiées dans votrefoo
méthode.D'autres solutions sont à utiliser un wrapper de classe (création d'une classe pour tenir votre Chaîne de référence, et changez la référence dans
foo
), ou tout simplement retourner la chaîne.Soit utiliser la valeur de retour de la méthode ou de créer une classe wrapper.
L'ai renvoyer la valeur:
Placer la valeur d'un objet:
Oui, vous pouvez modifier ce avec l'aide de réflexions, mais c'est contre la règle.
Chaîne de valeurs sont immuables-donc, une fois que vous obtenez une valeur, vous êtes coincé avec elle.
Littérale
String
s sont spécialement traités par le langage Java; votre code est à peu près équivalent à:En d'autres termes, vous êtes simplement en indiquant la référence locale
errorText
à un autreString
objet, ce qui affecte en rien en dehors de la méthode.Plus généralement, cependant,
String
s sont immuables; il n'y a aucun moyen de les modifier.Vous pouvez réattribuer la Chaîne de référence: