System.arraycopy 方法


從指定源數組中復制一個數組,復制從指定的位置開始,到目標數組的指定位置結束

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】

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM