A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

求解,迭代器能否遍历数组,如果不能为什么增强for可以遍历数组呢

2 个回复

正序浏览
cat73 黑马帝 2016-7-20 14:59:28
藤椅
https://docs.oracle.com/javase/specs/jls/se8/html/jls-14.html#jls-14.14
你可以看 14.14.2 部分,有提到:

如果被遍历的是 Iterable 的子类则编译成下面这种:
  1. for (I #i = Expression.iterator(); #i.hasNext(); ) {
  2.     {VariableModifier} TargetType Identifier =
  3.         (TargetType) #i.next();
  4.     Statement
  5. }
复制代码

如果是数组则编译成下面这种:
  1. for (int #i = 0; #i < #a.length; #i++) {
  2.     {VariableModifier} TargetType Identifier = #a[#i];
  3.     Statement
  4. }
复制代码
回复 使用道具 举报
cat73 黑马帝 2016-7-20 14:52:16
沙发
只要某个类实现了 java.lang.Iterable 接口,那么它就可以被 foreach 遍历。
对于这些类,编译后反编译就可以看到代码里自动调用了 iterator 方法来实现遍历。

而数组算是个很特殊的东西了,编译后再反编译,你会发现根本没出现 iterator,而是跟使用 for 控制下标来遍历的方式类似的一种结果。

也就是说 Java 在编译的时候会检查,如果这是一个类且实现了  java.lang.Iterable 接口,则使用 iterator 方法获取迭代器来进行遍历。
如果是数组,则使用 for + 下标的形式遍历。
其余的抛出编译错误。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马