以正确的方式复制数组

我偶然发现了 2 来自我的注释的示例,与复制阵列相关。

在第一个示例中,如下所示,据说这不是复制数组的方法。 但是当我尝试运行代码时,他设法复制了所有值 array1 在 array2.


int []array1={2,4,6,8,10};
int []array2=array1;
for/int x:array2/{
System.out.println/x/;
}


在第二个呈现的示例中,据说是复制阵列的正确方法。


int[] firstArray = {5, 10, 15, 20, 25 };
int[] secondArray = new int[5];
for /int i = 0; i < firstArray.length; i++/
secondArray[i] = firstArray[i];


我的问题是是否有这些 2 用于编码或优选示例的示例 2. 如果你是我的讲师,我会应用一个例子 1.. 与榜样相比,我将减少分数 2 方法还是一样?
已邀请:

窦买办

赞同来自:

第一个示例不会复制任何内容。 他分配了新变量的源数组 /
array2

/, 因此,两个变量 /
array1


array2

/ 请参阅相同的数组对象。

第二个示例实际上创建了第二个数组并将源数组的内容复制到其中。

还有其他更简单的方法来复制阵列。 您可以使用
Arrays.copyOf

或者
System.arraycopy

而不是明确复制数组的元素 for loop.


int[] secondArray = Arrays.copyOf /firstArray, firstArray.length/;


或者


int[] secondArray = new int[firstArray.length];
System.arraycopy/firstArray, 0, secondArray, 0, firstArray.length/;

龙天

赞同来自:

复制元素的完美方法是


System.arraycopy/array1,0, array2, 0, array1.length/;


上面的这段代码是替换第二个例子,避免了 for loop.

在您的第一个示例中,您只需参考第一个数组。 因此,可以从第二个阵列看到与第一阵列进行的事实。

我的问题是是否有这些 2 用于编码或优选示例的示例 2.

再次见,他们不做一些比较。 其中的第一个表示对阵列的引用,并且代码的第二个片段是指项目 it it. 因此,您无法比较它们。

还有其他方法可以复制数组元素,就像其他人一样,我更喜欢
System.arraycopy

, 因为

1/
Arrays.copyOf

在他自己内创建一个不同的数组对象,并将其返回到哪里 as System.arraycopy 使用传输的阵列。

2/ 克隆太慢了。 如果您没有其他选择,请勿使用它。
我避免克隆有几个原因。 这里
http://www.artima.com/intv/bloch13.html
/

克隆各个元素时

/.

卫东

赞同来自:

要使用第一个方法演示问题,请尝试以下操作:


int[] array1 = {2, 4, 6, 8, 10};
int[] array2 = array1;
array1[0] = 0;
System.out.println/array2[0]/;


你认为它会印刷什么?

0

它会打印 0, 因为
array2

现在表示
array1

:
两个变量现在都引用相同的对象,
因此,改变其中任何一个的内容都会看起来像两者的变化。

所以你的第一个方法 NOT 被称为应对阵列。
这是一个对另一个变量的简单分配
在这种情况下,来自的价值
array1


array2

,
所以两个变量都表示相同的事情。

至于你的第二种方法,
所以这是一种更简单的方法来做同样的方式:


int[] array2 = array1.clone//;

莫问

赞同来自:

在你的第一个例子中你只得到

一个阵列

有两个变量

参考

在他身上。 分配仅发送对数组的引用。 所以,和
firstArray

, 和
secondArray

表示相同的阵列。 这不是副本。 尝试设置
firstArray[0] = 99

并打印
secondArray

, 而且你会看到这是相同的阵列。

在第二个示例中,此实际复制 - 您创建了一个新数组并复制了每个值。 现在目的地
firstArray[0] = 99

不会更改它引用的数组
secondArray

, 因为它

复制

.

所以,答案是:如果你给出第一种方式,你将获得较低的估计。

实际使用具有复制阵列的最佳方法
System.arraycopy

,
Arrays.copyOf

或者
firstArray.clone//

.

知食

赞同来自:

int[] secondArray = new int[5];


在第二个示例中,您创建了一个数组 int 使用操作员
new

手动复制IT元素 for loop. 每当您使用运营商时
new

在 java, 有一个新的内存分配 /创建一个对象/.

在其中,如在第一种情况下,它只是一个参考分配,它们都表示相同的数组。 您可以轻松确保通过更改一个数组的内容,您将在第二个阵列中看到相同的效果。 这不会发生在阵列的第二个副本中。


int []array2=array1;

要回复问题请先登录注册