public class Test {
private static int i=7;

public static void main(String[] args) {
Test test=new Test();
test=null;
System.out.println(test.i);
}
}
为什么test为空了,还能使用test.i,打印出7来?

解决方案 »

  1.   

    和static有关
    不知道为什么
      

  2.   

    test = null并没有释放它的内存空间吧,要等着垃圾回收器回收,而垃圾回收器什么时候回收是不定的
      

  3.   

    首先不应该使用test.i,应该使用类名.属性
    只要类被classLoader进JVM,就可以通过类名.的方式找到栈中的这个属性
      

  4.   

    这样解释更好理解
    首先你要知道被static修饰的变量是静态变量,它不同其他基本数据类型或者对象的引用,静态变量是放在内存的静态块里的,而其他变量则是放在栈内存里的。。当你创建一个test引用后,实际上test是放在栈里的,你令test=null,只是操作栈里的引用,而真正放在静态块里的i并未改变,它一直存放在那,直到你要调用它。所以你打印的i肯定是7
      

  5.   

    http://blog.csdn.net/ZangXT/archive/2009/09/10/4537376.aspx
      

  6.   

    private static int i=7;有STATIC修饰了,这个是静态变量,类一加载就会有的,与某个具体的实例无关
      

  7.   

    STATIC  就是静态变量,不可改变的,一次就存到内存中去了,改不了也!呵呵
      

  8.   

    static和对象没有关系
    类级的
      

  9.   

    static修饰的都存放在栈内存中的,跟类对象的堆内存NULL OR NOT NULL 无关!
      

  10.   

    只要有这个类就有private static int
    静态的,就是恒常的。
      

  11.   

    System.out.println(test.i);  
    你编译完了以后就变成这样的了
    System.out.println(7);所以跟test没有一毛钱关系.
      

  12.   

    静态变量这个东西...在编译的时候就已经替换了...你编译完了以后就变成这样的了
    System.out.println(7); 
    所以你改变test跟它也没有关系了...