System.arraycopy引起的問題

使用

APIjava

public static void arraycopy(
                             Object src,  //源數組
                             int srcPos,  //源數組的起始位置
                             Object dest, //目標數組
                             int destPos, //目標數組的起始位置
                             int length   //複製長度
                             )

我用數組擴容的例子來演示這個方法的使用:segmentfault

public static void main(String[] args) {

    int[] arrA = new int[10];
    for (int i = 0; i < 10; i++) {
        arrA[i] = i;
    }
    System.out.println(Arrays.toString(arrA));

    int[] arrB = new int[20];
    System.arraycopy(arrA, 0, arrB, 0, 10);
    arrA = arrB;
    System.out.println(Arrays.toString(arrA));

}

測試:api

System.array演示:數組擴容

代碼截圖:數組

示例代碼

問題

先來看錯誤數據結構

錯誤截圖

錯誤出現的代碼部分截圖編輯器

錯誤出現的代碼部分截圖

在學習數據結構數組部分的時候,須要移動元素,編輯器,就會提示我,代碼(註釋掉的部分)能夠優化(註釋下方的代碼)。一看,比較簡潔,也彷彿看到過,就優化了,以前測試都沒問題,可是後面涉及到數組容量的問題,減容測試就出錯了,還好我以前寫的代碼我還保留着,測試沒有問題。學習

不使用System.arraycopy代碼

不使用System.arraycopy測試

沒有報錯,這說明這部分是能夠實現的,可是爲何使用Java底層的代碼就會出錯呢,我沒有去深究。測試

更多資料

[1] 在Java中System.arraycopy() 和 Arrays.copyOf()二者之間的區別優化

[2] System:System.arraycopy方法詳解.net

相關文章
相關標籤/搜索