最終的なクラスはNameAndValue
です。 NameAndValue
オブジェクトの配列をSystem.arrayCopy()
でコピーしました。コピーした配列のオブジェクトをNameAndValue
に変更すると、元の配列に反映されます。System.arrayCopy()はオブジェクトまたはオブジェクトへの参照をコピーしますか?
public final class NameAndValue
{
public String name;
public String value;
public NameAndValue()
{
}
public NameAndValue(String name,String value)
{
this.name = name;
this.value = value;
}
}
public class Main
{
public static void main(String[] args)
{
NameAndValue[] nv = new NameAndValue[4];
nv[0] = new NameAndValue("A", "1");
nv[1] = new NameAndValue("B", "2");
nv[2] = new NameAndValue("C", "3");
nv[3] = new NameAndValue("D", "4");
NameAndValue[] nv2 = new NameAndValue[4];
System.arraycopy(nv, 0, nv2, 0, 2);
nv2[2] = new NameAndValue("Y","25");
nv2[3] = new NameAndValue("Z","26");
for (int i = 0; i < 2; i++)
{
NameAndValue[] nv3 = new NameAndValue[4];
System.arraycopy(nv2, 0, nv3, 0, 4);
nv3[2].value = String.valueOf(i);
nv3[3].value = String.valueOf(i+1);
System.out.println(nv2[2].value);
System.out.println(nv2[3].value);
System.out.println("-----------------------");
}
}
}
私は、すべてのケースで25と26と右の出力を持っている必要があります
0
1
-----------------------
1
2
-----------------------
、と私は出力を取得しています?なぜそれが変わるのですか?
私は(コアのJava APIと様々な人気のある図書館で)多くのことを発見しましたそれは浅いコピーはドキュメントで明示的にこれを明示的に述べていません。 – berry120
@ berry120:そうです。それは合理的な仮定です。私はそれを明示的にしましたが、私が推測するように簡潔にする価値があります。:-) –
ああ、同意しました:-) – berry120