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. docker不顯示端口映射呢?2. nignx - docker內(nèi)nginx 80端口被占用3. angular.js - angular內(nèi)容過(guò)長(zhǎng)展開(kāi)收起效果4. docker綁定了nginx端口 外部訪問(wèn)不到5. docker網(wǎng)絡(luò)端口映射,沒(méi)有方便點(diǎn)的操作方法么?6. php - mysql 模糊搜索問(wèn)題7. fragment - android webView 返回后怎么禁止重新渲染?8. docker images顯示的鏡像過(guò)多,狗眼被亮瞎了,怎么辦?9. java - 為什么此私有靜態(tài)變量能被訪問(wèn)呢?10. thinkphp5.1學(xué)習(xí)時(shí)遇到session問(wèn)題
