增强for循环遍历数组时底层不使用迭代器,而是编译期直接转为基于下标的传统for循环,如for (int x : arr)被javac展开为for (int i = 0; i
Java 中增强 for 循环(
for (Type item : array))遍历数组时,底层不使用迭代器,而是直接通过数组下标进行普通 for 循环访问,编译器会将其翻译为传统的索引访问形式。编译期重写:转成传统 for 循环
对数组而言,javac 在编译阶段就将增强 for 循环展开为基于
length和下标的普通循环。例如:int[] arr = {1, 2, 3}; for (int x : arr) { System.out.println(x); }等价于:
Alibabacloud Sdk Client Initialization For Java下载在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
int[] arr = {1, 2, 3}; for (int i = 0; i不涉及 Iterator 接口
这点和遍历
Collection类型(如ArrayList)有本质区别:
- 数组是 Java 语言内置类型,没有实现
Iterable接口,也没有iterator()方法- 因此无法、也不需要调用
hasNext()或next()- JVM 对数组有专门的字节码指令支持(如
iaload,aaload),增强 for 遍历数组最终会生成这些指令验证方式:查看字节码
用
javap -c查看编译后的字节码,可清晰看到:
- 出现
arraylength指令获取长度- 使用
iload加载索引变量- 使用
iaload(对 int 数组)从数组中取元素- 没有调用任何
Iterator相关方法注意:集合类型走的是另一套逻辑
如果写的是
for (String s : list)(list是ArrayList),那底层确实会调用list.iterator(),进入迭代器模式。但这是针对实现了Iterable的对象,和数组无关。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南












