有如下代码:
//A为某个对象
A a = new A();List list = new ArrayList();
list.add(a);a = null;
//到这里时, 对象"A"及它的引用"a"所分配的存储空间有没有被释放呢?又如:
A a = null;for (int i = 0; i < 10; i++) {
   a = new A();
}a = null;
//这块代码中,是为对象"A"分配了十块大小的空间还是只会分配一个"A"大小的空间呢?大家讨论一下啊!

解决方案 »

  1.   

    1、这时a分配的对象空间已经没有引用。但要看java的垃圾回收器有没有回收这个空间。
    当a=null,垃圾回收器不一定马上回收空间。当回收时,就释放了。如果没回收,句没释放。
    2、一个空间。因为一个引用只能指向一个对象。a只能指向一个“A”。
      

  2.   

    1、释放(试下就知道了。)
    2、
    1〉   A a = null;    for (int i = 0; i  < 10; i++) { 
    2〉      a = new A(); 
       } 3〉   a = null; 
    以上代码解释:1〉处:声明类型A的对象a;此时内存中无。
    2〉处:先是分配一块内存给a,然后又让a反复指向一片新的内存空间。那么上一次的内存空间,java垃圾回收。
    3〉处:指向null,以前的空间释放。(建议用finalize())
      

  3.   

    答:
    1)问://到这里时, 对象"A"及它的引用"a"所分配的存储空间有没有被释放呢? 
     对象"A"的空间没有被释放。理由:虽然a不再指向对象“A”了,但:list中还引用着这个对象“A”,即:它还是list中的元素,故:不可能被释放
     另外:引用变量a自身的空间当然存在。2)问://这块代码中,是为对象"A"分配了十块大小的空间还是只会分配一个"A"大小的空间呢? 
    循环中一共分配了十个。但由于最后:a=null;因而最后又全被回收了。至于回收的时机,由GC决定。以上仅供你参考
      

  4.   

    楼上说的没问题.
    就是因为集合还保留了对原来的一个引用.所以很多内存泄漏都由此而来.貌似很多JAVA书都喜欢用这个做引申的例子将JAVA的内存泄漏问题
      

  5.   

    问://到这里时, 对象"A"及它的引用"a"所分配的存储空间有没有被释放呢?  
     对象"A"的空间没有被释放。理由:虽然a不再指向对象“A”了,但:list中还引用着这个对象“A”,即:它还是list中的元素,故:不可能被释放。 
     另外:引用变量a自身的空间当然存在。 2)问://这块代码中,是为对象"A"分配了十块大小的空间还是只会分配一个"A"大小的空间呢?  
    循环中一共分配了十个。但由于最后:a=null;因而最后又全被回收了。至于回收的时机,由GC决定。 以上仅供你参考 
    我也是这么认为的.........