- Java code
class A { public static final A a=null; static{System.out.println("A");}} public class Test{ public static void main(String[] args) { Object o=A.a; } }
我觉得应该什么都不输出,但运行结果输出A。
我想知道,A.a能否在编译期确定值??我认为能确定!
高手说说自己的意见。。。
------解决方案--------------------------------------------------------
不单单是null的问题,但null确实是问题之一
更重要的一个问题是会写到B.class常量池中的类型是有限的:String和几个基本类型
而A.a的类型是A
如果将a的类型改为String,为null仍然会去getstatic
如果a的类型为String,且有一个字符串值,那么B就使用ldc指令直接从B的常量池中取值,这表示a的值在编译的时候已经放到B.class中了