System.arraycopy
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length);
src:原數組對象
srcPos:原數組起始位置
dest:目标數組對象
destPos:目标數組起始位置
length:複制長度
注意不要以為src和dest是Object類型,就可以随便傳參,不是數組對象會報錯。
該方法有一個一維數組、二維數組複制的差別,一維數組拷貝其值,二維數組拷貝引用,具體原理我将不清楚,有興趣可以運作如下代碼。
public class SystemArrayCopy {
public static void main(String[] args) {
int[] arr1 = {, , };
int[] arr2 = new int[];
System.arraycopy(arr1, , arr2, , arr2.length);
for (int i = ; i < arr2.length; i++) {
System.out.print(arr2[i] + " ");
}
System.out.println();
String[] sArr1 = {"China", "Japan", "Korea"};
String[] sArr2 = new String[];
System.arraycopy(sArr1, , sArr2, , sArr2.length);
for (int i = ; i < sArr2.length; i++) {
System.out.print(sArr2[i] + " ");
}
System.out.println();
sArr1[] = "USA";
for (int i = ; i < sArr2.length; i++) {
System.out.print(sArr2[i] + " ");
}
System.out.println();
String[][] ss1 = {{"sh", "js", "zj"}, {"bj", "tj", "hb"}, {"sc", "cq", "yn"}};
String[][] ss2 = new String[ss1.length][ss1[].length];
System.arraycopy(ss1, , ss2, , ss1.length);
for (int i = ; i < ss2.length; i++) {
for (int j = ; j < ss2[i].length; j++)
System.out.print(ss2[i][j] + " ");
System.out.println();
}
System.out.println();
ss1[][] = "dsh";
for (int i = ; i < ss2.length; i++) {
for (int j = ; j < ss2[i].length; j++)
System.out.print(ss2[i][j] + " ");
System.out.println();
}
}
}
Arrays.copyOf
Arrays.copyOf()重載了很多類型,以int型為例
public static int[] copyOf(int[] original, int newLength);
original:原數組
newLength:複制長度
傳回新複制的數組對象
分析Arrays的源代碼可知底層實際上是調用System.arraycopy()
Object.clone
在Java中,數組也是一種對象,是以可以使用clone()方法。
String[] sArr1 = {"China", "Japan", "Korea"};
String[] sArr2;
sArr2 = sArr1.clone();
for (int i = ; i < sArr2.length; i++) {
System.out.print(sArr2[i] + " ");
}