以正确的方式复制数组
我偶然发现了 2 来自我的注释的示例,与复制阵列相关。
在第一个示例中,如下所示,据说这不是复制数组的方法。 但是当我尝试运行代码时,他设法复制了所有值 array1 在 array2.
在第二个呈现的示例中,据说是复制阵列的正确方法。
我的问题是是否有这些 2 用于编码或优选示例的示例 2. 如果你是我的讲师,我会应用一个例子 1.. 与榜样相比,我将减少分数 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 方法还是一样?
没有找到相关结果
已邀请:
5 个回复
窦买办
赞同来自:
/, 因此,两个变量 /
和
/ 请参阅相同的数组对象。
第二个示例实际上创建了第二个数组并将源数组的内容复制到其中。
还有其他更简单的方法来复制阵列。 您可以使用
或者
而不是明确复制数组的元素 for loop.
int[] secondArray = Arrays.copyOf /firstArray, firstArray.length/;
或者
龙天
赞同来自:
上面的这段代码是替换第二个例子,避免了 for loop.
在您的第一个示例中,您只需参考第一个数组。 因此,可以从第二个阵列看到与第一阵列进行的事实。
我的问题是是否有这些 2 用于编码或优选示例的示例 2.
再次见,他们不做一些比较。 其中的第一个表示对阵列的引用,并且代码的第二个片段是指项目 it it. 因此,您无法比较它们。
还有其他方法可以复制数组元素,就像其他人一样,我更喜欢
, 因为
1/
在他自己内创建一个不同的数组对象,并将其返回到哪里 as System.arraycopy 使用传输的阵列。
2/ 克隆太慢了。 如果您没有其他选择,请勿使用它。
我避免克隆有几个原因。 这里
http://www.artima.com/intv/bloch13.html
/
克隆各个元素时
/.
卫东
赞同来自:
你认为它会印刷什么?
0
它会打印 0, 因为
现在表示
:
两个变量现在都引用相同的对象,
因此,改变其中任何一个的内容都会看起来像两者的变化。
所以你的第一个方法 NOT 被称为应对阵列。
这是一个对另一个变量的简单分配
在这种情况下,来自的价值
到
,
所以两个变量都表示相同的事情。
至于你的第二种方法,
所以这是一种更简单的方法来做同样的方式:
int[] array2 = array1.clone//;
莫问
赞同来自:
一个阵列
有两个变量
参考
在他身上。 分配仅发送对数组的引用。 所以,和
, 和
表示相同的阵列。 这不是副本。 尝试设置
firstArray[0] = 99
并打印
, 而且你会看到这是相同的阵列。
在第二个示例中,此实际复制 - 您创建了一个新数组并复制了每个值。 现在目的地
firstArray[0] = 99
不会更改它引用的数组
, 因为它
复制
.
所以,答案是:如果你给出第一种方式,你将获得较低的估计。
实际使用具有复制阵列的最佳方法
,
或者
.
知食
赞同来自:
在第二个示例中,您创建了一个数组 int 使用操作员
手动复制IT元素 for loop. 每当您使用运营商时
在 java, 有一个新的内存分配 /创建一个对象/.
在其中,如在第一种情况下,它只是一个参考分配,它们都表示相同的数组。 您可以轻松确保通过更改一个数组的内容,您将在第二个阵列中看到相同的效果。 这不会发生在阵列的第二个副本中。
int []array2=array1;