1. 程式人生 > >Java基礎--forEach實現原理

Java基礎--forEach實現原理

  • 針對list的forEach
// 原始碼
import java.util.ArrayList;
import java.util.List;

public class ListTest {
	public static void main(String[] args) {
		List<String> list = new ArrayList<String>();
		list.add("小白");
		list.add("小黃");
		list.add("小綠");

        for(String str : list){
           System.out.print(str);
        }
	}
}
// 反編譯後的程式碼(因為使用的是網站提供的反編譯功能,亂碼問題請假裝看不見~)
import java.util.ArrayList;
import java.util.Iterator;

public class ListTest {

   public static void main(String[] var0) {
      ArrayList var1 = new ArrayList();
      var1.add("鐏忓繒婭�");
      var1.add("鐏忓繘綺�");
      var1.add("鐏忓繒璞�");
      // 可以看到,forEach被編譯成了迭代器訪問
      Iterator var2 = var1.iterator();
	
      while(var2.hasNext()) {
         String var3 = (String)var2.next();
         System.out.print(var3);
      }
   }
}
  • 針對陣列的forEach
// 原始碼
public class ArrayTest {
	public static void main(String[] args) {
		String[] array = {"小白", "小黃", "小綠"};

        for(String str : array){
           System.out.print(str);
        }
	}
}
// 反編譯後的程式碼
public class ArrayTest {

   public static void main(String[] var0) {
      String[] var1 = new String[]{"鐏忓繒婭�", "鐏忓繘綺�", "鐏忓繒璞�"};
      String[] var2 = var1;// copy一份,然後for迴圈
      int var3 = var1.length;

      for(int var4 = 0; var4 < var3; ++var4) {
         String var5 = var2[var4];
         System.out.print(var5);
      }

   }
}