Java中數組和集合的foreach操做編譯後到底是啥

今天和同事在關於foreach編譯後是for循環仍是迭代器有了不一樣意見,特作了個Demo,瞭解一下。java

是啥本身來看吧!數組

public class Demo {
    public static void main(String[] args) {
        int[] ints = new int[5];
        for (int s : ints) {
            System.out.println(s);
        }

        String[] intss = new String[5];
        for (String s : intss) {
            System.out.println(s);
        }

        List<String> strings = new ArrayList<>();
        for (String s : strings) {
            System.out.println(s);
        }

        Map<String,String> map = new HashMap<>();
        for (Map.Entry e: map.entrySet()) {
            System.out.println(e.getKey());
        }

    }
}

編譯後查看的源碼:code

public class Demo {
    public Demo() {
    }

    public static void main(String[] args) {
        int[] ints = new int[5];
        int[] var2 = ints;
        int var3 = ints.length;

        int var4;
        int s;
        for(var4 = 0; var4 < var3; ++var4) {
            s = var2[var4];
            System.out.println(s);
        }

        String[] intss = new String[5];
        String[] var8 = intss;
        var4 = intss.length;

        for(s = 0; s < var4; ++s) {
            String s = var8[s];
            System.out.println(s);
        }

        List<String> strings = new ArrayList();
        Iterator var10 = strings.iterator();

        while(var10.hasNext()) {
            String s = (String)var10.next();
            System.out.println(s);
        }

        Map<String, String> map = new HashMap();
        Iterator var13 = map.entrySet().iterator();

        while(var13.hasNext()) {
            Entry e = (Entry)var13.next();
            System.out.println(e.getKey());
        }

    }
}

總結:get

foreach對於數組來講依舊是for循環,對List、Map集合來講是迭代器。源碼

相關文章
相關標籤/搜索