two*_*e18 45 java optimization preprocessor
如果我有一个布尔字段,如:
private static final boolean DEBUG = false;
在我的代码中我有如下声明:
if(DEBUG) System.err.println("err1");
Java预处理器是否只是删除了if语句和无法访问的代码?
Ada*_*ter 115
大多数编译器都会删除该语句.例如:
public class Test {
private static final boolean DEBUG = false;
public static void main(String... args) {
if (DEBUG) {
System.out.println("Here I am");
}
}
}
Run Code Online (Sandbox Code Playgroud)
编译完这个类后,我会通过javap命令打印生成的指令列表:
javap -c Test
Compiled from "Test.java"
public class Test extends java.lang.Object{
public Test();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."":()V
4: return
public static void main(java.lang.String[]);
Code:
0: return
}
如你所见,不System.out.println!:)
Gre*_*ill 13
是的,Java编译器将消除if由常量控制的块中的编译代码.这是有条件地编译您不希望包含在生成构建中的"调试"代码的可接受方法.