私はJava文字列が不変であることを知っています。しかし、私が下の関数を実行すると、出力は私が期待するものではありません。文字列不変性質問
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";
}
私はそれがあることを期待通りに私が手出力はwicked sod
ではなく、wicked witch
。それは、Stringオブジェクト自体を渡すのではなく、2番目の引数として配列リファレンスをmodify関数に渡しているからですか?いかなる説明も高く評価されます。
ありがとうございました。これは、文字列への参照でもありません。だから、ss [0]とどう違うのですか? – OckhamsRazor
@OckhamsRazor: 's'に値を代入すると、パラメータの値だけが変更されます。 'ss [0]'に値を代入すると 'ss'が参照する配列の値が変更されます。 –
ああ私はそうだと思います。つまり、配列そのものに文字列が保持されていません。むしろ、配列の内容は文字列への参照を格納しますか? – OckhamsRazor