1

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

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

尽管在实践中这种情况是一种极端情况,但我很好奇为什么编译器会在这种特殊情况下被欺骗

4

0 回答 0