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 都是指向同一个数组的指针,所以您正在更改两者的值testtest2使用您的语句test2[2]=8

一种解决方案是将 test 的内容复制到 test 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 回答