今天和同事在關於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集合來講是迭代器。源碼