java foreach
为了研究java中的foreahch在底层到底干了什么,来看这一段代码
import java.util.*;
public class Main {
    public static void main(String[] args) {
        ArrayList<String> arrayList=new ArrayList();
        arrayList.add("!@#");
        arrayList.add("12312312");
        arrayList.add("qwqq");
        for(String a:arrayList){
            System.out.println(a);
        }
        int[]a=new int[]{1,2,3};
        for (int i:a){
            System.out.println(i);
        }
        Map<String,String> map=new HashMap<>();
        map.put("key1","value1");
        map.put("key2","value2");
        map.put("key3","value3");
        for (Map.Entry<String,String> i:map.entrySet()){
            System.out.println(i.getKey()+"=>"+i.getValue());
        }
    }
}编译成字节码之后是这样的
main.class
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
public class Main {
    public Main() {
    }
    public static void main(String[] args) {
        ArrayList<String> arrayList = new ArrayList();
        arrayList.add("!@#");
        arrayList.add("12312312");
        arrayList.add("qwqq");
        Iterator var2 = arrayList.iterator();
        while(var2.hasNext()) {
            String a = (String)var2.next();
            System.out.println(a);
        }
        int[] a = new int[]{1, 2, 3};
        int[] var8 = a;
        int var4 = a.length;
        for(int var5 = 0; var5 < var4; ++var5) {
            int i = var8[var5];
            System.out.println(i);
        }
        Map<String, String> map = new HashMap();
        map.put("key1", "value1");
        map.put("key2", "value2");
        map.put("key3", "value3");
        Iterator var10 = map.entrySet().iterator();
        while(var10.hasNext()) {
            Entry<String, String> i = (Entry)var10.next();
            System.out.println((String)i.getKey() + "=>" + (String)i.getValue());
        }
    }
}可以看到,对数组,其实还是采用了去数字大小之后进行for循环遍历,对于List和Map都是调用了自身的迭代器,进行for循环
输出结果
!@#
12312312
qwqq
1
2
3
key1=>value1
key2=>value2
key3=>value3