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
Last modification:November 20, 2023
如果觉得我的文章对你有用,请随意赞赏