java undefined编译时间常量

时间:2018-03-26 14:17:47

标签: java compilation constant-expression

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等。

在这一点上,我感觉不知何时编译器被欺骗生成未经检查的常量赋值字节码

虽然在实践中这种情况是一个边缘情况,但我很好奇为什么在这种特殊情况下可以欺骗编译器

0 个答案:

没有答案