class A
{
   public static String s="haha";
   public a()
   {
      
   }
}------------------------------------------------
class Test
{  
   A a=null;
   public static void main(String[] args)
   {
      for(int i=0;i<10;i++)
      {
        a=new A();
      }
   }}
我想问的是,这样在内存中会分别分配十个地址段来存放静态变量s吗? 还是只有一个? 当这十个A对象被GC回收时,是否在同时回收相关的变量s?
谢谢

解决方案 »

  1.   

    static变量是随着类的初始化而初始化的。因为同一虚拟机中一个类只装载一次,所以static变量也只初始化一次。至于static对象什么时候会被垃圾回收,就要看什么时候停止对它的引用了。如果没有手动地把它的引用设为null,对象是永远不会被垃圾回收的。public class A {

    static A a = new A("static A #0"); private String id; A(String s) {
    id = s;
    System.out.println(id + " is created.");
    }

    public void finalize() {
    System.out.println(id + " is finalized.");
    }

    public static void main(String[] args) {
    for(int i = 0; i < 10; i++) {
    new A("A #" + i);
    System.gc();
    }
    a = null;
    System.gc();
    }
    }当然这里说的是一般对象,如果是String对象,因为String字面量是存储在String pool中的,所以它什么时候回收又是另外一回事了。
      

  2.   

    只有一个 static变量是属于类的 该类所有实例共享