JavaSE 6 定义了明确赋值的规则
但是,可以将编译时常量的值分配给它自己的未定义值,这会导致奇怪的行为:
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 等。
在这一点上,我感觉编译器不知何故被欺骗生成未经检查的常量赋值字节码
尽管在实践中这种情况是一种极端情况,但我很好奇为什么编译器会在这种特殊情况下被欺骗