2011-08-26 33 views
1

对不起,我的英文不好,我测试有明确的方法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); 


    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 

    System.out.println("after clear"); 
    System.out.println(); 
    for(List<String> list : tl1.mainList){ 
     for(String s : list){ 
      System.out.println(s); 
     } 
    } 

} 
} 

所以我的问题是当我清除tl1.list使用tl1.list.clear();然后打印它的值是明确的,但是当我将这个tl1.list赋值为null时,它将打印值如何?

回答

2

tl1.list.clear()清除了列表list,它也被添加到mainList。由于Java是面向对象的listmainList.get(0)引用完全相同的对象。如果将tl1.list设置为null,则只能取消引用该对象,但仍可在mainList中使用。

我不知道如果我理解你的问题,但我想这是你问...

+0

m问这个无论你在这里给出的答案,但仍然混淆,当我将列表分配为null,然后如何保持mainList?如果我只通过for循环中的tl1.list,然后得到空指针异常,而不是tl1.mainList,那么它就应该为空。 – Pratik

+0

这就是对象定向的工作方式,即将对象引用赋值给变量。如果将变量设置为null('tl1.list = null'),则只能删除引用。看看[Java教程](http://download.oracle.com/javase/tutorial/java/index.html)。 – home

3

分配一个任何集合并不意味着与之相关的元素将被删除。这只意味着你不再需要这个对象。现在取决于垃圾收集器谁取消引用这个对象。如果在空分配打印语句之间存在大量语句,则可能会导致问题,因为GC可能有时间将其取消引用。
我希望我的回答能帮助你理解这一点。

1

不清楚你在问什么,也许你认为clear()删除了这个对象 - 这是不正确的,它使列表变空。