1

私たちの教授がそうするように私たちに言ったので、私はディープコピーを実験しようとしています。彼は私たちにコードのスニペットをくれましたが、netbeansに入力すると、機能しません...

誰かがこれらのコードを通してディープコピーの概念を説明するのを手伝ってもらえますか?

    int i;
    String [] original = {"Aref","Ali","Emad","Sami"};
    String [] result = new String(original.length);      
    for(i=0;i<original.length;i++){
        result[i] = (String) original[i].clone();
    }
4

2 に答える 2

3

ディープ コピーは、オブジェクトの個々のフィールドをコピーするだけでなく、それらのフィールドが参照する他のすべてのオブジェクトを通過してコピーするオブジェクトのコピーです。これにより、これらのオブジェクトの 1 つが 1 つのコピーによって変更されても、他のコピーは影響を受けません。

このコードは、original最初に新しい配列を作成し、それを反復して、配列で参照される各文字列のコピーを作成し、新しくコピーされた文字列への参照を配列の新しいコピーに入れることで、 のディープ コピーを作成します。または、少なくとも、他の人が言及したタイプミスがなければ、それはそうするでしょう.

Java 文字列は不変であり、参照されたオブジェクトが変更される危険がないため、この特定のケースではこれは無意味であることに注意してください。

于 2012-07-11T15:53:38.383 に答える
1

コードが機能しない理由は次の行です。

String [] result = new String(original.length);  

resultは の配列Stringですが、単一の をインスタンス化しようとしていますString。JVM がスローしているエラーは、この行を示しているはずです。

ただし、これはディープ コピーとは関係ありません。そのために、見てみましょう

ディープコピー、シャローコピー、クローン

于 2012-07-11T15:55:20.523 に答える