私はJava試験のために勉強していますが、私が見つけたものは、理論で教えられているものとは実質的に異なっていました.
以下はコードです:
StringBuilder num3[]= new StringBuilder[2];
num3[0]= new StringBuilder("Pine");
num3[1]= new StringBuilder("Oak");
StringBuilder num4[] = new StringBuilder[2];
System.arraycopy(num3, 0, num4, 0, 2);
System.out.println(num3[0]==num4[0]);
System.out.println(num4[0]);
num3[0] = new StringBuilder("Choc");
System.out.println(num3[0]);
System.out.println(num4[0]);
出力は次のとおりです。
真実 パイン チョコ パイン
true ステートメントは、num4[0] が num3[0] の同じオブジェクトを参照するため、浅いコピーであることを示します。しかし、num3[0] を変更すると、num4[0] も変更されると予想していました。
浅いコピーの場合、なぜこれが起こるのでしょうか?
新しいオブジェクトが num3[0] に対して作成され、古い「Pine」StringBuilder オブジェクトが num4 配列によって参照されているためですか?
もしそうなら、この浅いコピーが明らかな System.arraycopy の例を教えてもらえますか?
前もって感謝します、クリシオファー