Je sais que les chaînes Java sont immuables. Cependant, lorsque j'exécute la fonction ci-dessous, la sortie n'est pas ce que je m'attends à ce que ce soit.Question de l'immutabilité de la chaîne
public static void main(String[] args) {
String s = "wicked";
String [] ss = new String [1];
ss[0] = "witch";
modify(s, ss);
System.out.println(s+" "+ ss[0]);
}
private static void modify(String s, String[] ss) {
s = "sad";
ss[0] = "sod";
}
La sortie que je reçois est wicked sod
, et non wicked witch
comme je m'y attendais qu'il soit. Est-ce parce que je passe une référence de tableau comme second argument de la fonction modify plutôt que de passer l'objet String lui-même? Toute clarification est très appréciée.
merci Jon! Cela m'amène à mon prochain qn- n'est-ce pas un objet s aussi une référence à une chaîne? alors comment s est différent de ss [0]? – OckhamsRazor
@OckhamsRazor: L'attribution d'une valeur à 's' ne change que la valeur du paramètre. Assigner une valeur à 'ss [0]' change la valeur du tableau auquel 'ss' fait référence. –
ah je vois- donc cela signifie que les tableaux eux-mêmes ne contiennent pas de chaînes; plutôt, le contenu des tableaux stockent des références aux chaînes? – OckhamsRazor