import java.util.ArrayList;
import java.util.List;
public class TestList {
private List<String> list;
private List<List<String>> mainList;
public TestList(){
    list = new ArrayList<String>();
    mainList = new ArrayList<List<String>>();
}
public static void main(String arg[]){
    String[] mylist = {"sunday","monda","tuesday","wednesday","thurday","friday","saturday"};    TestList tl1 = new TestList();    for(String s : mylist)
        tl1.list.add(s);//这里为什么可以这样写? list是私有变量 可以对象点么?不解
    
     tl1.mainList.add(tl1.list);
    //tl1.list.clear(); // here if clear then not getting the list
//    tl1.list = null; ///// but here to assign null still getting list
    tl1.list.clear();
    System.out.println("after clear");
    System.out.println("@@@@@@@@@======="+tl1.list);
    for(List<String> list : tl1.mainList){
        for(String s : list){
            System.out.println("*********"+s);
        }
    }
}
 }
=================================== clear 的时候结果为
after clear
@@@@@@@@@=======[]
===================================null 的时候结果为
after clear
@@@@@@@@@=======null
*********sunday
*********monda
*********tuesday
*********wednesday
*********thurday
*********friday
*********saturday

解决方案 »

  1.   

    clear()只是清空list中所有的elements,list依然会占用内存空间
    而=null则是释放掉list所占的内存空间
    你注释中的问题:
    list是私有变量没有错,但你没有注意你的main方法跟list是在同一个类吗?
      

  2.   

    tl1.list.add(s);//这里为什么可以这样写? list是私有变量 可以对象点么?不解
    私有变量在自己的类里是可以的
    //tl1.list.clear(); // 内存中的东西被清除了
    //    tl1.list = null;//只是tl1.list不在指向任何对象,内存中的东西还在
    谨慎考虑,回答错误,概不负责
      

  3.   


    list占用内存空间然后输出[]?
      

  4.   


    指向,那clear后指向是什么,null之后没有指向,可以这样问不
      

  5.   

    在项目应用中,释放内存,一般用哪个,有什么优缺点,我想把这个搞清楚一点。还有null和clear和GC有什么联系么?
      

  6.   

    根据情况来看吧,ArrayList内部维护的是一个数组,那么你list == null;就是释放这个数组对象,当然里面所引用的对象也就释放了。如果list.clear();看看源代码就知道了,是把list里面对象遍历赋值为null,意思就是释放list里面所有对象。这样就很清楚了,如果你这个list还需要使用,那么你可以使用clear去释放掉list里面所有的数据,GC在回收的时候就有可能回收掉原list里面的这些数据了。如果你都不需要了,那么你就用==null这样GC就有可能把list以及里面关联的一些数据也都回收了
      

  7.   

    clear清空list的元素
    =null 是取消引用
    我觉得clear是清楚内存(不是gc回收,里面没数据了也就不占内存空间了)而=null要等方法跑完gc才会回收这个list
    不晓得对不对.
      

  8.   

    clear --是把list中的元素清空 但是它还是指向堆中的一个对象引用,即堆中的内存地址
    null后 --就没有指向了,等待 GC回收了