一个老问题 , 增强for循环的实现方式是什么
public static void main(String[] args) {List<String> list = new ArrayList<>();//对集合 , 本质上是iterator迭代器list.add("A");list.add("B");list.add("C");for (String s : list) {System.out.println(s);}int[] intArr = {1, 2, 3};for (int val : intArr) {//对数组 , 就是用fori的常规方式实现System.out.println(val);}}
为了验证这个结果 . 我们将生成的.class文件进行反编译 . 则可以看到
public static void main(String[] args) {List<String> list = new ArrayList();list.add("A");list.add("B");list.add("C");String s;for (Iterator localIterator = list.iterator(); localIterator.hasNext(); ) {s = (String) localIterator.next();System.out.println(s);}int[] intArr = {1, 2, 3};int val;for (int i = 0; i < intArr.length; i++) {val = intArr[i];System.out.println(val);}}
所以 , foreach在数组上还是使用了原来的fori循环 , 在其他对象上 , 实则是调用了itearator()方式使用迭代器的方式完成遍历 . 再来看如下代码 :
String str = "";for (String s : str) {System.out.println(s);}
foreach用法java?当然 , 敲完如上代码后编译器肯定会冒红报错 , 我们先不管这些 . 直接运行
可以看到 , foreach要求的对象必须是数组或Iterable . 我们再看一下Iterable这个接口的源码
/*** Implementing this interface allows an object to be the target of* the "for-each loop" statement. See* <strong>* <a href="{@docRoot}/../technotes/guides/language/foreach.html">For-each Loop</a>* </strong>** @param <T> the type of elements returned by the iterator** @since 1.5* @jls 14.14.2 The enhanced for statement*/
public interface Iterable<T> {
// 其他代码略...
}
这个接口里明确表明了 "实现该接口则允许对象成为'foreach'的目标" , 就是你实现这个接口之后 , 就可以使用foreach进行元素迭代 .
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态