java中按值复制数组

java中按值复制数组,java,Java,我试图制作一个数组的独立副本,但没有得到。请看,由于效率原因,我无法使用for循环逐整数复制它。还有别的办法吗? 这是我的密码: int[] temp = new int[arr.length]; temp = arr; 看看这个方法。像 int[] b = new int[a.length]; System.arraycopy(a, 0, b, 0, a.length); 退房。它可以复制任何类型的数组,是复制数组的首选(并经过优化)方法。创建现有数组的新副本(可选不同长度)。您可以使

我试图制作一个数组的独立副本,但没有得到。请看,由于效率原因,我无法使用for循环逐整数复制它。还有别的办法吗? 这是我的密码:

int[] temp = new int[arr.length]; 
temp = arr; 
看看这个方法。像

int[] b = new int[a.length];
System.arraycopy(a, 0, b, 0, a.length);
退房。它可以复制任何类型的数组,是复制数组的首选(并经过优化)方法。

创建现有数组的新副本(可选不同长度)。

您可以使用,但我怀疑它是否会更有效。无论如何都必须复制内存,因此唯一可能的优化就是一次复制更大的内存块。但是一次复制的内存块的大小受到处理器/系统体系结构的强烈限制。

为此,请尝试使用
clone()
方法。我记得这是Josh Bloch在《高效Java》中推荐使用克隆的唯一案例

int[] temp = arr.clone ();
但是arrayCopy要快得多。300万个元件阵列的样本性能测试:

System.arrayCopy time: 8ms
     arr.clone() time: 29ms
 Arrays.copyOf() time: 49ms
 simple for-loop time: 75ms

什么是“效率原因”?你真的测试过这段代码有问题吗?或者你只是在猜测?真是奇怪的效率原因…特别是对于大型阵列,该方法可以比简单的for循环实现快很多。统计数据不错,但它回避了一个问题:为什么他应该“尝试使用clone()”,因为我第一次写的是clone()然后出于兴趣进行了测试:)我无法重现结果,看看哪种方法显示前3种方法是等效的。因此,我倾向于使用专门为该任务而构建的
Arrays.copyOf
。请注意,该方法在1.6中是新的,可以说比System更易于使用。arraycopy()@matt:我不再提及“Java 6中的新功能”,因为Java 6已经足够老了(2006年12月已经是过去的一段时间了).我并不是想以此作为不使用它的理由-只是提醒那些不熟悉它的人,因为他们没有使用1.6