0

Java 配列で clone() メソッドを使用して、文字列配列を複製します。複製後、新しい配列に新しい文字列が割り当てられ、新しいアドレスが割り当てられることを期待しています。しかし...私は少し異なる動作をしました。これを見てください:

(印刷されます:

same address
One

)

public class ArrayCopyClone {

    static String[] array2 = new String[] {"One", "Two", "Three"};

    public static void main(String[] args) {

        String[] copy2 = array2.clone();

        if (copy2[0] != array2[0])  {
            System.out.println("good");   // will never show up
        } else {
           System.out.println("same address");  // I'm expecting never be here
        }

        array2[0] = "new";

        System.out.println(copy2[0]); // "One", and this is OK (it means we have a copy)

    }

}

文字列シャドーイングに関連していますか?それはすべきですか?

4

2 に答える 2

1

配列のクローンを作成すると、浅いコピーが作成されます。なので中身は同じです。ディープ クローニングについては、こちらを参照してください。

于 2013-02-12T16:07:10.760 に答える
0

まず、デフォルトclone()では「ディープ クローン」として実装されていないため、サブオブジェクトを参照としてコピーします。さらに、文字列は JDK によってキャッシュされます。2 つのこれらの効果を公開しています。

于 2013-02-12T16:07:06.227 に答える