Java If(false) Compile

2022-09-04 08:37:43

我正在使用Tomcat开发一个动态Web项目。拥有一个全局标志很有用,这是我在开发和部署服务器之间唯一需要更改的内容。该标志的最大用途是打印语句。

public class Debug {
    public final static boolean DEVEL = true;        
    public static void print(String message){
        if(DEVEL){
            System.out.println(message);
        }
    }
}

我的问题是,java会编译出打印语句吗?即,如果 devel 标签是假的,则消息显然不会打印出来,但它们会包含在类文件中(devel 是最终的)。这是一个效率问题。我听说java编译器非常聪明,但它会接受这一点吗?


答案 1

使用“final”属性(就像你所做的那样),它将编译出代码:

public static final boolean DEVEL = false;

您可以通过在生成的类文件中查找仅在编译代码时才会显示的字符串进行检查。


答案 2

看看这篇文章:

http://www.javaworld.com/javaworld/jw-03-2000/jw-03-javaperf_4.html

您提供的代码称为“死代码”,因此,如果将DEVEL设置为false,则不会将其包含在编译的类文件中,它将不会包含在字节码中。

另外,请检查命令

javap -c

以查看类的结果字节码。


推荐