Java List.toArray()方法:為什么傳入數(shù)組長(zhǎng)度大于List長(zhǎng)度時(shí),結(jié)果并非全部填充null?

Java List.toArray()方法:為什么傳入數(shù)組長(zhǎng)度大于List長(zhǎng)度時(shí),結(jié)果并非全部填充null?

深入剖析Java List.toArray(T[] a)方法的工作機(jī)制

在Java開發(fā)中,List.toArray(T[] a)方法是將List集合轉(zhuǎn)換為數(shù)組的常用手段。然而,其運(yùn)行機(jī)制并非總是那么直觀。本文將深入探討該方法的內(nèi)部原理,并解釋一個(gè)常見的誤解。

讓我們來看一個(gè)例子:

List<Integer> list = List.of(12, 34, 56); Integer[] array = list.toArray(new Integer[]{1, 2, 1, 43, 32, 1}); System.out.println(Arrays.toString(array));

這段代碼的輸出結(jié)果是[12, 34, 56, NULL, 32, 1],這與許多開發(fā)者預(yù)期的[12, 34, 56, null, null, null]有所不同。為什么會(huì)這樣呢?

立即學(xué)習(xí)Java免費(fèi)學(xué)習(xí)筆記(深入)”;

關(guān)鍵在于List.toArray(T[] a)方法的實(shí)現(xiàn)細(xì)節(jié)。Java文檔指出,如果傳入的數(shù)組長(zhǎng)度大于List的元素?cái)?shù)量,則List元素復(fù)制到數(shù)組后,緊隨其后的數(shù)組第一個(gè)元素將被設(shè)置為null。 并非所有剩余元素都將被填充為null。

讓我們觀察ArrayList的源碼片段(雖然List.of()創(chuàng)建的列表并非ArrayList,但其toArray方法的邏輯類似):

@SuppressWarnings("unchecked") public <T> T[] toArray(T[] a) {     if (a.length > size) // 如果數(shù)組長(zhǎng)度大于列表大小         a[size] = null; // 將列表元素之后數(shù)組的第一個(gè)元素設(shè)置為null     return a; }

這段代碼清楚地表明,當(dāng)傳入數(shù)組長(zhǎng)度超過List長(zhǎng)度時(shí),只有緊跟在List元素后的第一個(gè)數(shù)組元素會(huì)被賦值為null。

回到之前的例子,List.of(12, 34, 56)包含三個(gè)元素,而傳入的數(shù)組new Integer[]{1, 2, 1, 43, 32, 1}長(zhǎng)度為六。toArray方法將12, 34, 56復(fù)制到數(shù)組的前三個(gè)位置,并將第四個(gè)位置設(shè)置為null,其余元素保持原樣,最終結(jié)果為[12, 34, 56, null, 32, 1]。這與Java文檔的描述完全一致。

因此,理解List.toArray(T[] a)方法的這一特性對(duì)于避免潛在的編程錯(cuò)誤至關(guān)重要。只有在充分了解傳入數(shù)組大小和List元素?cái)?shù)量關(guān)系的情況下,才能正確解讀和利用該方法的返回值。

以上就是Java List.toArray()方法:

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊9 分享