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. git - 使用淘寶npm安裝hexo出現(xiàn)問(wèn)題?2. html5和Flash對(duì)抗是什么情況?3. 小程序怎么加外鏈,語(yǔ)句怎么寫(xiě)!求救新手,開(kāi)文檔沒(méi)發(fā)現(xiàn)4. javascript - vue-resource中如何設(shè)置全局的timeout?5. javascript - 在 vue里面用import引入js文件,結(jié)果為undefined6. PC 手機(jī)兼容的 編輯器7. php如何獲取訪問(wèn)者路由器的mac地址8. 多選框?qū)戇M(jìn)數(shù)據(jù)庫(kù)怎么寫(xiě)9. 求教一個(gè)mysql建表分組索引問(wèn)題10. thinkPHP5中獲取數(shù)據(jù)庫(kù)數(shù)據(jù)后默認(rèn)選中下拉框的值,傳遞到后臺(tái)消失不見(jiàn)。有圖有代碼,希望有人幫忙
