標籤:
數組的拷貝 分為 2種情況,一種為淺拷貝,即引用傳遞,第二種為深拷貝,即不單單只是拷貝了引用,同時開闢了一塊新的記憶體空間
一)淺拷貝有三種方式:
//第一種方式利用for迴圈:int[] a={1,2,4,6};int length=a.length;int[] b=new int[length];for (int i = 0; i < length; i++) {b[i]=a[i];}//第二種方式直接賦值:int[] array1={1,2,4,6};int[] array2=a;/*這裡把array1數組的值複製給array2,如果你這樣去運行,就會發現此時兩個數組的值是一樣的。這是傳遞的是引用(也就是地址),之後改變其中一個數組另一個也會跟著變化。*/ //第三種方式:利用Arrays內建的copyof int copy[] = Arrays.copyOf(a, a.length);
二)一維數組的深拷貝(system.arrayCopy())
/**
* 數組深拷貝的方法有如下幾種:
* 1。 調用clone
* 2。 調用System.arraycopy
* 以上兩種對基本類型和物件類型資料效果等同。
* 3。 使用FOR迴圈,將數組的每個元素複製。(注意調用clone方法)
*/
舉例:
Object[] src = new Object[]{ new String("Zhao"), Integer.valueOf(1), Integer.valueOf(2), Integer.valueOf(3), Integer.valueOf(4)}; Object[] dest = src.clone(); //1.拷貝資料 // Object[] dest = new Object[5]; // System.arraycopy(src, 0, dest, 0, dest.length); System.out.println( dest.equals(src)); System.out.println( dest == src ); for (int i = 0; i < dest.length; i++) { System.out.print( dest[i]+", " ); dest[i] = new String("KE"); //2.改變新數組內容 System.out.print( dest[i]+", " ); System.out.println( src[i]+","); //3.不影響原始數組 } System.out.println();
注意: 一維數組下的深拷貝在 多維陣列 只是淺拷貝!!
java數組拷貝