如果我有一个布尔字段,例如:
private static final boolean DEBUG = false;
在我的代码中,我有如下语句:
if(DEBUG) System.err.println("err1");
Java 预处理器是否只是摆脱了 if 语句和无法访问的代码?
如果我有一个布尔字段,例如:
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”
公共类测试扩展 java.lang.Object{
公共测试();
代码:
0:aload_0
1:调用特殊#1;//方法 java/lang/Object."":()V
4:返回
公共静态无效主(java.lang.String[]);
代码:
0:返回
}
如您所见,不System.out.println!:)
是的,Java 编译器将消除if由常量控制的块中的已编译代码。这是有条件地编译您不想包含在生产构建中的“调试”代码的可接受方式。