Java配列の参照型についての質問です。
Java2は私が作成したnameフィールドを持つクラスです。
以下コード↓↓↓
Java2[] array = {new Java2("aaa"),new Java2("bbb")};
Java2[] array2 = new Java2[];
System.arraycopy(array,0,array2,0,array.length);
array2[0].name = "ccc";
System.out.println(array[0].name);
これを実行すると"ccc"と出力されます。これは配列の中身に参照が入っているので納得できます。
しかし、Stringの場合、
String[] str = {"aaa","bbb"};
String[] s = new String[];
System.arraycopy(str,0,s,0,array.length); ---------ここを書き換える
s[0] = "ccc";
System.out.println(str[0]);
同じように配列の中身に参照が入っているのにもかかわらず"aaa"と出力され、書き換えることができません。
そして、
System.arraycopy(str,0,s,0,array.length); ←こちらの文をs = str;に書き換えて実行したところ、
str[0]は"ccc"と出力されました。なぜでしょうか?
ちなみに
String a = "a";
String b = a;
b = "c";
System.out.println(a);
これを出力すると"a"が出力されます。これはString型の特性上、bにaの参照値を代入したとしても、参照先の値をコピーしてbに新たなインスタンスが生成され、aとbは別々のインスタンスを参照しているから。というのは理解しています。
私自身がarraycopyの内部での動きをよく理解できていないのもあると思います。
ご教授よろしくお願い致します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。