java - For-Each能夠遍歷數(shù)組(Array)的原理是什么?
問(wèn)題描述
比如這樣一個(gè)例子...
Egg[] eggs = {new Egg(), new Egg()};for (Egg egg : eggs) { egg.eat();}
自己嘗試了一下,冒號(hào)后面的對(duì)象只要不是數(shù)組或者Iterable對(duì)象,都是會(huì)報(bào)出編譯錯(cuò)誤。Can only iterate over an array or an instance of java.lang.Iterable
然后我通過(guò)調(diào)試發(fā)現(xiàn)For-Each實(shí)際上是不斷地調(diào)用迭代器的hasNext()和next()方法來(lái)實(shí)現(xiàn)對(duì)Collection類遍歷的。
那么遍歷數(shù)組的原理是什么呢?也是在JDK層面實(shí)現(xiàn)的嗎?
問(wèn)題解答
回答1:是的,這只是一個(gè)語(yǔ)法糖罷了~ 能夠foreach的話必須要實(shí)現(xiàn)Iterable接口~
回答2:For-Each 能遍歷數(shù)組的原理是 JVM 在編譯的時(shí)候?qū)⑵浞g為了傳統(tǒng)的 For-Index 循環(huán),即:
for (int i = 0; i < arr.length; i++) {...}
這也是 JVM 為 Java 提供的一個(gè)語(yǔ)法糖。
相關(guān)文章:
1. 我在導(dǎo)入模板資源時(shí)遇到無(wú)法顯示的問(wèn)題,請(qǐng)老師解答下2. 運(yùn)行python程序時(shí)出現(xiàn)“應(yīng)用程序發(fā)生異常”的內(nèi)存錯(cuò)誤?3. thinkphp6使用驗(yàn)證器 信息如何輸出到前端頁(yè)面4. python - sqlalchemy更新數(shù)據(jù)報(bào)錯(cuò)5. javascript - h5微信中怎么禁止橫屏6. PHPExcel表格導(dǎo)入數(shù)據(jù)庫(kù)怎么導(dǎo)入7. macos - 無(wú)法source activate python278. html5 - 前端面試碰到了一個(gè)緩存數(shù)據(jù)的問(wèn)題,來(lái)論壇上請(qǐng)教一下9. html - 網(wǎng)頁(yè)的a標(biāo)簽到底要不要寫上域名?10. css - 移動(dòng)端 盒子內(nèi)加overflow-y:scroll后 字體會(huì)變大

網(wǎng)公網(wǎng)安備