4

重複の可能性:
配列Javaのコピーを作成します

私はJavaの初心者であり、ある配列の内容を別の変数にコピーする必要があります。ただし、Javaは常に、値ではなく参照によって配列を渡します。

それが混乱していた場合、私が意味することは次のとおりです。

int test[]={1,2,3,4};
int test2[];
test2=test;
test2[2]=8;
for(int i=0;i<test2.length;i++)
    System.out.print(test[i]); // Prints 1284 instead of 1234

testこの例では、の値を変更したくありません。これは、ArrayListやVectorsなどのJavaのより高度な機能を使用せずに可能ですか?

編集:System.ArrayCopyとtest.clone()を試しましたが、それでも機能しないようです。これが私の実際のコードです:

temp_image=image.clone();
for(int a=0;a<image.length;a++)
    for(int b=0;b<image[0].length;b++)
        image[a][b]=temp_image[image.length-1-a][b];

基本的に私は「イメージ」を逆さまにしようとしています。コードのどこかにエラーがありますか?

4

3 に答える 3

5

アレイのクローンを作成する必要があります。

test2=test.clone();
于 2012-04-13T02:32:56.170 に答える
2

Java 6 以降では、Arrays.copyOfを使用できます。

test2 = Arrays.copyOf(test, test.length);

あなたがしようとしていることについては、 test.clone() は問題ありません。ただし、サイズ変更を行いたい場合は、copyOf を使用してそれを行うことができます。性能的にはそうだと思う

System.arraycopyは、必要に応じてさらに多くのオプションを提供します。

于 2012-04-13T02:39:32.813 に答える
0

testとtest2は両方とも同じ配列へのポインターであるため、両方の値を変更し、ステートメントを使用しtestますtest2test2[2]=8

解決策は、テストの内容をテスト2にコピーし、test2の特定のインデックスで値を変更することです。

    for (int i=0,i<test.length,i++)
        test2[i]=test[i]
    //Now both arrays have the same values

    test2[2]=8

    for (int j=0,j<test.length,j++)
        System.out.print(test[i])
        System.out.println()
        System.out.print(test2[i])

出力します

    1 2 3 4
    1 2 8 4
于 2012-04-13T02:41:23.213 に答える