JavaSE 6定义了Definite assignment
的规则但是,可以将编译时常量的值分配给它自己的未定义值,这会导致奇怪的行为:
Main.java
public class Main{
public static final boolean CONST_TEST = Main. CONST_TEST;
public static void main(String[] args) {
System.out.println("CONST_TEST="+ Main. CONST_TEST);
}
}
编译:
$ javac Main.java
运行它:
$ java Main
输出:
CONST_TEST=false
不同的数据类型采用不同的值,例如String为null,float为0.0,boolean为false等。
在这一点上,我感觉不知何时编译器被欺骗生成未经检查的常量赋值字节码
虽然在实践中这种情况是一个边缘情况,但我很好奇为什么在这种特殊情况下可以欺骗编译器