java 预处理,Java预处理器

这篇博客探讨了Java编译器如何处理布尔变量和条件语句。当`DEBUG`设置为`false`时,编译器通常会消除包含`if(DEBUG)`的代码块,从而提高运行效率。示例展示了`javap`命令用于查看编译后的字节码,证明了相关`System.out.println`语句被移除。
摘要由CSDN通过智能技术生成

If I have a boolean field like:

private static final boolean DEBUG = false;

and within my code I have statements like:

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

does the Java preprocessor just get rid of the if statement and the unreachable code?

解决方案

Most compilers will eliminate the statement. For example:

public class Test {

private static final boolean DEBUG = false;

public static void main(String... args) {

if (DEBUG) {

System.out.println("Here I am");

}

}

}

After compiling this class, I then print a listing of the produced instructions via the javap command:

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

}

As you can see, no System.out.println! :)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值