eag*_*arn 5 java arrays clone copy
我有这些代码,我正在制作一个数组的副本.使用System.arraycopy似乎比...更冗长clone().但两者都给出了相同的结果.一个优于另一个有什么优势吗?这是代码:
import java.util.*;
public class CopyArrayandArrayList {
public static void main(String[] args){
//Array copying
char[] copyFrom = { 'd', 'e', 'c', 'a', 'f', 'f', 'e'};
char[] copyTo = new char[7];
System.arraycopy(copyFrom, 0, copyTo, 0, 7);
char[] copyThree = new char[7];
copyThree=copyFrom.clone();
}
}
Run Code Online (Sandbox Code Playgroud)
您创建的对象:
char[] copyThree = new char[7];
Run Code Online (Sandbox Code Playgroud)
将是gc'd."最终结果"可以通过以下方式实现:
char[] copyThree = copyFrom.clone();
Run Code Online (Sandbox Code Playgroud)
使用System.arrayCopy,copyFrom并且copyTo需要满足某些要求,如数组类型和数组大小.
使用该clone方法,将创建一个新数组,其中包含与另一个数组相同的内容(相同的对象 - 相同的引用,而不是具有相同内容的不同对象).当然阵列类型应该相同.
两种方式都复制数组内容的引用.他们不是clone对象:
Object[] array = new Object[] {
new Object(),
new Object(),
new Object(),
new Object()};
Object[] otherArray = new Object[array.length];
Object[] clonedArray = array.clone();
System.arraycopy(array, 0, otherArray, 0, array.length);
for (int ii=0; ii<array.length; ii++) {
System.out.println(array[ii]+" : "+otherArray[ii]+" : "+clonedArray[ii]);
}
Run Code Online (Sandbox Code Playgroud)
规定:
java.lang.Object@1d256a73 : java.lang.Object@1d256a73 : java.lang.Object@1d256a73
java.lang.Object@36fb2f8 : java.lang.Object@36fb2f8 : java.lang.Object@36fb2f8
java.lang.Object@1a4eb98b : java.lang.Object@1a4eb98b : java.lang.Object@1a4eb98b
java.lang.Object@2677622b : java.lang.Object@2677622b : java.lang.Object@2677622b
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20333 次 |
| 最近记录: |