黑马程序员技术交流社区
标题:
关于迭代器能否遍历数组的问题
[打印本页]
作者:
SkyBlack
时间:
2016-7-20 14:10
标题:
关于迭代器能否遍历数组的问题
求解,迭代器能否遍历数组,如果不能为什么增强for可以遍历数组呢
作者:
cat73
时间:
2016-7-20 14:52
只要某个类实现了 java.lang.Iterable 接口,那么它就可以被 foreach 遍历。
对于这些类,编译后反编译就可以看到代码里自动调用了 iterator 方法来实现遍历。
而数组算是个很特殊的东西了,编译后再反编译,你会发现根本没出现 iterator,而是跟使用 for 控制下标来遍历的方式类似的一种结果。
也就是说 Java 在编译的时候会检查,如果这是一个类且实现了 java.lang.Iterable 接口,则使用 iterator 方法获取迭代器来进行遍历。
如果是数组,则使用 for + 下标的形式遍历。
其余的抛出编译错误。
作者:
cat73
时间:
2016-7-20 14:59
https://docs.oracle.com/javase/specs/jls/se8/html/jls-14.html#jls-14.14
你可以看 14.14.2 部分,有提到:
如果被遍历的是 Iterable 的子类则编译成下面这种:
for (I #i = Expression.iterator(); #i.hasNext(); ) {
{VariableModifier} TargetType Identifier =
(TargetType) #i.next();
Statement
}
复制代码
如果是数组则编译成下面这种:
for (int #i = 0; #i < #a.length; #i++) {
{VariableModifier} TargetType Identifier = #a[#i];
Statement
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2