歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Java中數組的拷貝

Java中數組的拷貝

日期:2017/3/1 9:42:16   编辑:Linux編程

Java數組的復制是引用傳遞,而並不是其他語言的值傳遞。

第一種方式利用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這個函數,從JAVA API中找了一段。大家看一下。

public static voidarraycopy(Object src, int srcPos, Object dest, int destPos, int length)從指定源數組中復制一個數組,復制從指定的位置開始,到目標數組的指定位置結束。從src引用的源數組到dest引用的目標數組,數組組件的一個子序列被復制下來。被復制的組件的編號等於length參數。源數組中位置在srcPos到srcPos+length-1之間的組件被分別復制到目標數組中的destPos到destPos+length-1位置。

如果參數src和dest引用相同的數組對象,則復制的執行過程就好像首先將srcPos到srcPos+length-1位置

的組件復制到一個帶有length組件的臨時數組,然後再將此臨時數組的內容復制到目標數組的destPos到

destPos+length-1位置一樣。

If 如果dest為null,則拋出NullPointerException異常。

如果src為null, 則拋出NullPointerException異常,並且不會修改目標數組。

否則,只要下列任何情況為真,則拋出ArrayStoreException異常並且不會修改目標數組:

src參數指的是非數組對象。
dest參數指的是非數組對象。
src參數和dest參數指的是那些其組件類型為不同基本類型的數組。
src參數指的是具有基本組件類型的數組且dest參數指的是具有引用組件類型的數組。
src參數指的是具有引用組件類型的數組且dest參數指的是具有基本組件類型的數組。

否則,只要下列任何情況為真,則拋出IndexOutOfBoundsException異常,並且不會修改目標數組:

srcPos參數為負。
destPos參數為負。
length參數為負。
srcPos+length大於src.length,即源數組的長度。
destPos+length大於dest.length,即目標數組的長度。

否則,如果源數組中srcPos到srcPos+length-1位置上的實際組件通過分配轉換並不能轉換成目標數組的組

件類型,則拋出ArrayStoreException異常。在這種情況下,將k設置為比長度小的最小非負整數,這樣就

無法將src[srcPos+k]轉換為目標數組的組件類型;當拋出異常時,從srcPos到srcPos+k-1位置上的源數組

組件已經被復制到目標數組中的destPos到destPos+k-1位置,而目標數組中的其他位置不會被修改。(因

為已經詳細說明過的那些限制,只能將此段落有效地應用於兩個數組都有引用類型的組件類型的情況。)

參數:src- 源數組。
srcPos- 源數組中的起始位置。
dest- 目標數組。
destPos-
目標數據中的起始位置。
length-
要復制的數組元素的數量。
拋出:IndexOutOfBoundsException-
如果復制會導致對數組范圍以外的數據的訪問。
ArrayStoreException- 如果因為類型不匹配而使得無法將src數組中的元素存儲到dest數組中。
NullPointerException- 如果src或dest為null。

編寫高質量代碼 改善Java程序的151個建議 PDF高清完整版 http://www.linuxidc.com/Linux/2014-06/103388.htm

Java 8簡明教程 http://www.linuxidc.com/Linux/2014-03/98754.htm

Java對象初始化順序的簡單驗證 http://www.linuxidc.com/Linux/2014-02/96220.htm

Java對象值傳遞和對象傳遞的總結 http://www.linuxidc.com/Linux/2012-12/76692.htm

Java對象序列化ObjectOutputStream和ObjectInputStream示例 http://www.linuxidc.com/Linux/2012-08/68360.htm

Copyright © Linux教程網 All Rights Reserved