public class A{
static int a=5;
public static void main(String args[]){
  A testA=new A();
 testA=null;
System.out.println(testA.a) }
}
问:输出是什么呢? 若是输出5,那么为什么??testA不是置空了吗,也可以调用static a 变量??哪位大侠解释下

解决方案 »

  1.   

    这个代码在编译器时已经被修改成
    public class A{
    static int a=5;
    public static void main(String args[]){
      A testA=new A();
     testA=null;
    System.out.println(A.a);//因为a是静态的,所以编译器自动忽略了你的变量而直接使用实际类替代}
    }
      

  2.   

    public class A{
    static int a=5;
    public static void main(String args[]){
      A testA=null;System.out.println(testA.a) }
    }结果还是5?不解
      

  3.   

    to: xiangqianchong(向前冲) 
    你没有实例化那testA只是个空得指针,这个指针只不过是A的类型。
    因用A.a
      

  4.   

    这个程序应该是刻意为之的.一般情况下, 静态成员都用类名来调用, 即A.a但是因为JAVA也支持用实例变量调用静态成员, 所以用testA.a也是可以的, 这时只需要确定testA是A类型的变量即可, testA不一定要指向一个A的实例.通常不推荐用实例变量名来调用静态成员, 因为这样容易让人产生误解, 降低代码的可读性.
      

  5.   

    补充上面静态变量在内存中的静态位置是不变的。
    而你新new出来的对象是指向另外的地址空间。