如何在Java中按值复制数组?

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 的值发生改变。是否有可能在不使用 Java 的任何高级特性(如 ArrayList 和 Vectors)的情况下实现这一点?
编辑:我尝试了 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];

基本上我想要把这张“图片”上下翻转。代码里是否有错误?

System.arraycopy:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html - Luiggi Mendoza
@LuiggiMendoza 你可能想开始使用更新的JavaDocs;Java 1.4已经落后了3个版本(10年) - Matt Ball
这肯定有2000个完全相同的副本吧? - user166390
1
我非常确定超过9000个。 - Kaleb Brasee
@MДΓΓБДLL 嗯,如果你检查一下你评论中的链接,它也涉及到了 System.arraycopy - Luiggi Mendoza
@LuiggiMendoza 我的意思只是你应该链接到非过时的JavaDocs - Matt Ball
3个回答

5

您需要克隆您的数组。

test2=test.clone();

2

从Java 6开始,您可以使用Arrays.copyOf方法:

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

对于你想要做的事情,test.clone() 是可以的。但是如果你想要调整大小,copyOf 允许你这样做。我认为在性能方面,System.arraycopy 可以提供更多选项,如果你需要的话。


0

因为test和test2都是指向同一个数组的指针,所以您使用语句test2[2]=8更改了testtest2的值。

解决方案是将test的内容复制到test2中,并更改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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接