Java预处理器


问题内容

如果我有一个布尔字段,如:

private static final boolean DEBUG = false;

在我的代码中,我有如下语句:

if(DEBUG) System.err.println("err1");

Java预处理程序只是摆脱了if语句和无法访问的代码?


问题答案:

大多数编译器都会删除该语句。例如:

public class Test {

    private static final boolean DEBUG = false;

    public static void main(String... args) {
        if (DEBUG) {
            System.out.println("Here I am");
        }
    }

}

编译完此类后,我将通过javap命令打印产生的指令清单:

javap -c测试
    从“ Test.java”编译
    公共类Test扩展了java.lang.Object {
    公共Test();
      码:
       0:加载_0
       1:调用特殊#1; //方法java / lang / Object。“” :()V
       4:返回

    公共静态void main(java.lang.String []);
      码:
       0:返回

    }

如您所见,不System.out.println!:)