天天看點

Arrays工具類的部分源碼分析

Arrays.copyof():

複制指定的數組,用空值截斷或填充(如有必要),使副本具有指定的長度。 對于在原始數組和副本中都有效的所有索引,這兩個數組将包含相同的值。 對于副本中有效但不是原始索引的任何索引,副本将包含null 。 當且僅當指定的長度大于原始數組的長度時,此類索引才會存在。 生成的數組與原始數組的類完全相同。

 複制指定的數組,用空值截斷或填充(如有必要),使副本具有指定的長度。 對于在原始數組和副本中都有效的所有索引,這兩個數組将包含相同的值。 對于副本中有效但不是原始索引的任何索引,副本将包含null 。 當且僅當指定的長度大于原始數組的長度時,此類索引才會存在。 結果數組屬于newType類。

從指定的源數組中複制一個數組,從指定位置開始,到目标數組的指定位置。 數組元件的子序列從src引用的源數組複制到dest引用的目标數組。 複制的元件數等于length參數。 源數組中位置srcPos到srcPos+length-1處的元件分别複制到目标數組的位置destPos到destPos+length-1 。

如果src和dest參數引用同一個數組對象,則執行複制就像将srcPos到srcPos+length-1位置的分量首先複制到具有length分量的臨時數組,然後将臨時數組的内容複制到通過目标數組的destPos+length-1複制到位置destPos 。

如果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是小于 length 的最小非負整數,使得src[srcPos+ k ]不能轉換為目标數組的元件類型; 當抛出異常時,從位置srcPos到srcPos+ k -1源數組元件将已經被複制到目标數組位置destPos到destPos+ k -1并且目标數組的其他位置不會被修改。 (由于已經逐項列出了限制,本段僅适用于兩個數組都具有引用類型的元件類型的情況。)