System.arraycopy和Arrays.copyOf的原理解剖

Ijiran發表於2018-10-17

陣列的複製其實在很多業務情況下會用到,不同的業務情況下選擇適合的方式來實施複製是每個開發人員要考慮的事情。

那麼System.arraycopyArrays.copyOf到底是如何複製的呢?接下來就一起來討論一下吧。


arraycopy

arraycopy是System提供的native靜態方法,方法原型如下;

public static native void arraycopy(Object arg, int arg0, Object arg1, int arg2, int arg3);複製程式碼

引數arg:源陣列物件

arg0:源陣列的起始位置

arg1:目標陣列物件

arg2:目標陣列的起始位置

arg3:要複製的元素數量


copyOf

Arrays類中存在著copyOf的很多種實現方式,在進行陣列的複製過程中,我們只需要呼叫其中一種即可,呼叫方式如下;

Arrays.copyOf(elementData, size);複製程式碼

引數elementData:源陣列物件

size:目標陣列的長度

來看一下copyOf的原始碼,如下;

System.arraycopy和Arrays.copyOf的原理解剖

首先,建立了一個和源陣列元素相同型別的新陣列;

接著呼叫了System.arraycopy函式,並且在arraycopy函式最後一個引數(要複製的元素數量)取了設定的size源陣列長度兩者的最小值

最後返回了新陣列


歡迎大家關注我的公眾號:Ijiran的程式設計思維。特別宣告:未經允許,禁止任何形式的轉載!


System.arraycopy和Arrays.copyOf的原理解剖Java原始碼原理解析、大量面試經驗分享。


相關文章