數組複製使我們在編程過程中常常要使用到的,在java中數組複製我們大概可以分爲兩種,一種是引用複製,另一種就是深度複製(複製後兩個數組互不相干)。
下面我們就通過測試的方法來詳細看看什麼是引用複製和深度複製。
引用複製:
顧名思義就是其值是引用的,值得改變會隨着被引用的對象改變。
System.out.println("引用複製-----------------------------");
int[] e = {1,2,3,4,56,7,8};
int[] f = e;
for(int i=0;i<f.length;i++){
System.out.println(f[i]);
}
System.out.println("更改原始一維數組引用複製-----------------------------");
for(int i=0;i<e.length;i++){
e[i]=1;
}
for(int i=0;i<f.length;i++){
System.out.println(f[i]);
}
結果:
引用複製-----------------------------
1
2
3
4
56
7
8
更改原始一維數組引用複製-----------------------------
1
1
1
1
1
1
1
下面在展示下兩種深度複製的代碼:
有兩種方法:
一種是clone(),另一種是System.arraycopy().
System.out.println("一維數組深度複製-----------------------------");
int[] a = {1,2,3,4,56,7,8};
int[] b = (int[])a.clone();
for(int i=0;i<b.length;i++){
System.out.println(b[i]);
}
System.out.println("更改原始一維數組深度複製-----------------------------");
for(int i=0;i<a.length;i++){
a[i]=1;
}
for(int i=0;i<b.length;i++){
System.out.println(b[i]);
}
System.out.println("一維數組深度複製1-----------------------------");
int[] c = {1,2,3,4,56,7,8};
int[] d = new int[c.length];
System.arraycopy(c,0, d, 0, c.length);
for(int i=0;i<d.length;i++){
System.out.println(d[i]);
}
System.out.println("更改原始一維數組深度複製1-----------------------------");
for(int i=0;i<c.length;i++){
c[i]=1;
}
for(int i=0;i<d.length;i++){
System.out.println(d[i]);
}
結果顯示:
一維數組深度複製-----------------------------
1
2
3
4
56
7
8
更改原始一維數組深度複製-----------------------------
1
2
3
4
56
7
8
一維數組深度複製1-----------------------------
1
2
3
4
56
7
8
更改原始一維數組深度複製-----------------------------
1
2
3
4
56
7
8