從指定源數組中復制一個數組,復制從指定的位置開始,到目標數組的指定位置結束
import java.util.Arrays;
public class SystemArrayCopyTest {
public static void main(String[] args) {
int [] tset1 = new int []{2,3,4,5,6,7,8} ;
System.out.println(Arrays.toString(tset1));
int [] test2 = new int [tset1.length] ;
System.arraycopy(tset1, 0, test2, 0, tset1.length) ;
System.out.println(Arrays.toString(test2));
test2[0] = 8; test2[1] = 88;
System.out.println(Arrays.toString(test2));
//只修改了復制來的副本數組,原數組沒有變,此時是值傳遞
char [][]one = new char[][]{{'a','b'},{'c','d'},{'e','f'}};
System.out.println(Arrays.toString(one[0]));
char [][] another = new char [2][2] ; System.arraycopy(one, 0, another, 0, 2) ;
System.out.println(Arrays.toString(another[0]));
// another[0][0] = 'x' ; another[0][1] = 'y' ;
one[0][0] = 'x' ; one[0][1] = 'y' ;
System.out.println(Arrays.toString(one[0]));
System.out.println(Arrays.toString(another[0]));
/* java其實沒有二維數組的概念,平常實現的二維數組只是元素是一維數組的一維數組 ,
而數組也是引用類型,繼承自Object類。數組是new出來的。這些性質也就導致arraycopy()二維數組時出現的問題。
如果是一維數組,那么元素都是基礎類型(如int,double等),
使用arraycopy()方法后,是把原數組的值傳給了新數組,屬於值傳遞。而如果是二維數組,
數組的第一維裝的是一個一維數組的引用,第二維里是元素數值。對二維數組應用arraycopy()方法后,
第一維的引用被復制給新數組的第一維,也就是兩個數組的第一維都指向相同的“那些數組”。
而這時改變其中任何一個數組的元素的值, 其實都修改了“那些數組”的元素的值,
所以原數組和新數組的元素值都一樣了。 * */ }
}
結果:
[2, 3, 4, 5, 6, 7, 8]
//一維數組的復制屬於值傳遞 。。修改副本原來的不會變
[2, 3, 4, 5, 6, 7, 8] 原來的
[8, 88, 4, 5, 6, 7, 8] 復制來的
//二維的數組,復制結果是一維的引用變量傳遞給副本的一維數組了,那么兩個數組的高維儲存的當然是指向統一一維數組的引用變量,所以修改任意一個另一個也會改變
[a, b] 母本【0】
[a, b] 副本【0】
//修改任意一個后
[x, y] 母本【0】
[x, y] 副本【0】