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