Java条件编译
学习过C语言或者C++语言的同学都知道它们支持条件编译,那么今天我们来学习下在Java语言中如何实现条件编译。Java语言本身没有提供条件编译,但是Java编译器对.java文件编译为.class文件做了优化,下面通过一个例子给大家详细讲解。
下面先给出HelloWorld.java文件:
1 package com.test; 2 3 /** 4 * Test Demo 5 */ 6 public class HelloWorld { 7 8 public static void main(String[] args) { 9 if (BuildConfig.FLAG) { 10 System.out.println("Hello World"); 11 } else { 12 System.out.println("Java条件编译测试"); 13 } 14 } 15 16 }
再来看看BuildConfig.java文件:
package com.test; /** * Created by Administrator on 2015/5/24. */ public final class BuildConfig { public static final boolean FLAG = false; }
再来看看该.java文件被转化为.class文件的内容:
// // Source code recreated from a .class file by IntelliJ IDEA // (powered by Fernflower decompiler) // package com.test; public class HelloWorld { public HelloWorld() { } public static void main(String[] args) { System.out.println("Java条件编译测试"); } }
可以知道的是BuildConfig.FLAG永远都为false,if块内的代码当然也不会被执行,这部分代码就不会被编译到.class文件中。
如果FLAG是字符串会怎么样?字符串之间如果使用equals进行比较,在转化为.class文件时不会得到优化。
HelloWorld.java文件:
package com.test; /** * Test Demo */ public class HelloWorld { public static void main(String[] args) { if (BuildConfig.FLAG.equals("false")) { System.out.println("Hello World"); } else { System.out.println("Java条件编译测试"); } } }
HelloWorld.class文件:
// // Source code recreated from a .class file by IntelliJ IDEA // (powered by Fernflower decompiler) // package com.test; public class HelloWorld { public HelloWorld() { } public static void main(String[] args) { if("false".equals("false")) { System.out.println("Hello World"); } else { System.out.println("Java条件编译测试"); } } }
如果真的需要字符串比较,实现条件编译的话可以使用 "=="。
HelloWorld.java文件:
package com.test; /** * Test Demo */ public class HelloWorld { public static void main(String[] args) { if (BuildConfig.FLAG == "false") { System.out.println("Hello World"); } else { System.out.println("Java条件编译测试"); } } }
HelloWorld.class文件:
// // Source code recreated from a .class file by IntelliJ IDEA // (powered by Fernflower decompiler) // package com.test; public class HelloWorld { public HelloWorld() { } public static void main(String[] args) { System.out.println("Hello World"); } }