Java源碼:
/**
* Demo.java
* com.yuanchuangyun.libra.web
*
*
* ver date author
* ──────────────────────────────────
* 2017年5月19日 renguoqiang
*
* Copyright (c) 2017, yuanchuangyun All Rights Reserved.
*/
package com.yuanchuangyun.libra.web;
public class Demo {
public void test(){
for(int i= 0;i<5;i++){
System.out.println(i);
}
}
}
Java反編譯指令:
javap -c Demo.class >Demo.txt
Java反編譯結果:
Compiled from "Demo.java"
public class com.yuanchuangyun.libra.web.Demo {
public com.yuanchuangyun.libra.web.Demo();
Code:
0: aload_0
1: invokespecial #8 // Method java/lang/Object."<init>":()V
4: return
public void test();
Code:
0: iconst_0
1: istore_1
2: goto 15
5: getstatic #15 // Field java/lang/System.out:Ljava/io/PrintStream;
8: iload_1
9: invokevirtual #21 // Method java/io/PrintStream.println:(I)V
12: iinc 1, 1
15: iload_1
16: iconst_5
17: if_icmplt 5
20: return
}
Java裡的for其實是用goto關鍵字實作的。
讓我想起了09年一次去微軟亞洲研究院面試,面試者問我C#裡的for循環底層使用什麼實作的,我确實不知道。
另外,11年在微軟亞洲研究院因為工作需要,反編譯Windows HPC Server的某個dll(C#編寫的),發現裡邊竟然用goto關鍵字寫代碼。