1

を持っている場合、ディープ コピーを取得するためfloat[] a = {1,2,3};だけに使用してコピーできますか? float[] b = a;いつ使用する必要があるかを知るにはどうすればよいa.clone()ですか?

明確にするために: に影響を与えずに変更できるようにしたいa(例: ) 。a[0]=4;b

4

6 に答える 6

5

作成するだけfloat[] b = a;では十分ではありません。配列オブジェクトが と の 2 つの参照間で共有されるためaですb

しかし、プリミティブ型の配列があるため、使用するには十分float[] b = a.clone()です。この場合のクローンはディープ コピーを作成し、内部にプリミティブ値を含む配列オブジェクトを複製します。

何らかの参照型の配列がある場合は、配列を複製し、すべてのオブジェクトを反復して複製し、ディープ コピーを取得する必要があります。

于 2013-06-08T08:12:59.333 に答える
4

浅いコピーとは、古い配列のメモリ位置を指す新しい参照のみを作成することを意味し、深いコピーとは、新しいメモリ位置を割り当てて、最初の配列の内容を別の配列にコピーすることを意味します。

誰かが最初の配列を無効化/削除することを恐れている場合にのみ、ディープ コピーを使用してください。その場合、2 番目の配列も存在しないメモリまたは null を指します。コンテンツを 2 番目の配列に保存する必要がある場合は、ディープ コピーを使用するか、シャロー コピーを使用します。

浅いコピーと深いコピーについて詳しくは、http: //en.wikipedia.org/wiki/Object_copyをご覧ください。

これは、配列の浅いコピーまたは深いコピーを作成する方法です。

浅いコピー

float[] b = a;

ディープコピー

float[] b = Arrays.copyOf(a);
于 2013-06-08T07:16:03.883 に答える
2

float[] b = a;variable が保持する Array オブジェクトの参照を variable に代入していることを意味aしますb

Arrays.copyOf()またはSystem.arraycopy()を使用して、Java で配列を複製します。マイクロベンチマークも見てください。

于 2013-06-08T07:16:10.790 に答える
0

いいえ、たとえば次のようにする必要があります。

float[] b = (float[])a.clone();
于 2013-06-08T07:18:39.583 に答える
-1

プリミティブを複製できるとは思いませんが、必要に応じて、常に新しい配列とループを作成して、一方のすべての値を他方にコピーできます。

于 2013-06-08T07:18:28.643 に答える