2 回答

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超5個(gè)贊
Java 編譯器沒(méi)有檢查您添加到列表中的元素的類型,因?yàn)槟暶髁嗽碱愋停?/p>
List?list?=?new?ArrayList();
然后在執(zhí)行期間您嘗試分配String
給int
,這ClassCastException
在運(yùn)行時(shí)引起。
您在這一行沒(méi)有遇到異常int int0 = list.get(0);
,因?yàn)樽詣?dòng)裝箱(在本例中為拆箱)。
正是這類問(wèn)題導(dǎo)致了Java 語(yǔ)言中引入泛型。因此,為了讓編譯器檢查放入列表的類型,您需要將聲明更改為:
List<Integer>?list?=?new?ArrayList<>();
這將告訴編譯器檢查添加到列表中的值的類型并強(qiáng)制它們?yōu)?code>Integers。因此,基本上運(yùn)行時(shí)錯(cuò)誤將被消除并被編譯時(shí)錯(cuò)誤取代。

TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超5個(gè)贊
像這樣的類型化定義List<Integer>
正是為了防止此類錯(cuò)誤。但是您沒(méi)有使用List list
任何類型,因此您拒絕在運(yùn)行程序之前獲取有關(guān)編譯期間錯(cuò)誤的信息。
聲明具有特定類型的列表
List<Integher> list = new ArrayList<>();
...Java編譯器會(huì)告訴你你的錯(cuò)誤。您將看到以下行被標(biāo)記為錯(cuò)誤:
list.add("2");
添加回答
舉報(bào)