Java Preprocessor

后端 未结 2 745
傲寒
傲寒 2020-12-13 08:45

If I have a boolean field like:

private static final boolean DEBUG = false;

and within my code I have statements like:

if(DEBUG) S

相关标签:
2条回答
  • 2020-12-13 09:17

    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! :)

    0 讨论(0)
  • 2020-12-13 09:25

    Yes, the Java compiler will eliminate the compiled code within if blocks that are controlled by constants. This is an acceptable way to conditionally compile "debug" code that you don't want to include in a production build.

    0 讨论(0)
提交回复
热议问题