Knowledge Point 20180308 Dead Code
不知道有没有前辈注意过,当你编写一段“废话式的代码时”会给出一个Dead Code警告,点击警告,那么你所写的废物代码会被编译器消除,那么如果你不理睬这个警告呢?编译后会是什么样的呢?下面我们写点代码,来查看一下编译后的结果,这里使用反编译工具jd-gui.exe。代码如下:
package cn.five.four; public class Test { public static void main(String[] args) { int a = 7; int b = 9; test1(); test2(a, b); } //废话代码--条件语句中,已经可以确定条件真假的会被认为是死代码(Dead Code),也叫无效代码 public static void test1(){ if(5>6){ System.out.println("jdk1.7输出废话代码!!"); }else { System.out.println("都不用编译,你自己都知道要输出这段代码!"); } } //条件不确定的不是死代码 public static void test2(int a,int b){ if(a>b){ System.out.println("条件语句块中只有一句代码!"); }else if (a == b) { System.out.println("条件语句块中只有两句代码!"); System.out.println("条件语句块中只有两句代码!"); }else { System.out.println("会输出这句吗?"); } } }
反编译
package cn.five.four; import java.io.PrintStream; public class Test { public static void main(String[] args) { int a = 7; int b = 9; test1(); test2(a, b); } public static void test1() { System.out.println("都不用编译,你自己都知道要输出这段代码!"); } public static void test2(int a, int b) { if (a > b) { System.out.println("条件语句块中只有一句代码!"); } else if (a == b) { System.out.println("条件语句块中只有两句代码!"); System.out.println("条件语句块中只有两句代码!"); } else { System.out.println("会输出这句吗?"); } } }
上面我们知道了编译器在编译后会自动将死代码优化为已知的结果,这是编译器的优化。不过聪明如我们的程序员应该不至于写出这样的代码,在这里仅仅是表明编译器也是可以优化我们的代码的。