關於Java中的數組復制函數System.arraycopy()


    System.arraycopy()是Java系統提供的用於數組復制的函數。了解該函數前,先了解以下概念。

1、Java中的深復制和淺復制:

深復制:可以復制對象的內容和引用。例如:值拷貝。
淺復制:僅復制對象的引用。例如:對象拷貝(拷貝的是地址)。

2、函數原型:

public static native void arraycopy(Object src, int srcPos,
                Object dst, int dstPos, int length);
src:原數組對象
srcPos:copy的起始位置
dst:目標數組對象
dstPos:copy到目標的起始位置
length:copy的長度

  arraycopy()是System提供一個native靜態方法,用於數組之間的復制。根據數據中數據類型的不同進行不同的處理,分為值拷貝(基本類型)和對象拷貝(普通類型,即對象類型)
該方法針對數據類型為基本類型的一維數組進行的是深復制;而二維數組或數據為引用類型的一維數據來說,進行的是淺復制。【因二維數組的元素類型是數組類型,而數組類型也是引用類型】
  由於上述方法是在JVM中直接執行的,因此其比for循環和clone更加高效。
3、Java中復制數組的幾種方法:

(1)for遍歷
(2)數組clone():

    int[]a = new int[]{1,2,3};
    int[]b = a.clone();

(3)System.arraycopy()
(4)Arrays.copyof():源碼中,實際最終調用的還是System.arraycopy()。

4、補充:

  若自定義一個類,想調用Object的super.clone()方法,則該類必須實現Cloneable接口。

// Object.java源碼如下:
protected Object clone() throws CloneNotSupportedException {
        if (!(this instanceof Cloneable)) {   //非Cloneable實例,拋出異常 
            throw new CloneNotSupportedException("Class " + getClass().getName() +
                                                 " doesn't implement Cloneable");
        }

        return internalClone();   //native方法
}

private native Object internalClone();

5、Java設計模式中的"原型模式"會用到上述clone()。

  

 


免責聲明!

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



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