Java 无法理解此示例中的null和clear语句

Java 无法理解此示例中的null和clear语句,java,list,Java,List,对不起,我的英语很差,我用clear方法测试List对象并分配空值 这是代码 public class TestList { private List<String> list; private List<List<String>> mainList; public TestList(){ list = new ArrayList<String>(); mainList = new ArrayList<List<Str

对不起,我的英语很差,我用clear方法测试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);
        }
    }

}
 }
公共类测试列表{
私人名单;
私人名单;
公共测试列表(){
列表=新的ArrayList();
mainList=newarraylist();
}
公共静态void main(字符串arg[]){
String[]mylist={“星期日”、“蒙达”、“星期二”、“星期三”、“星期四”、“星期五”、“星期六”};
TestList tl1=新的TestList();
for(字符串s:mylist)
tl1.列表。添加项;
tl1.mainList.add(tl1.list);
//tl1.list.clear();//此处如果清除,则不获取列表
tl1.list=null;///但此处要分配null,但仍在获取列表
System.out.println(“清除后”);
System.out.println();
用于(列表:tl1.mainList){
用于(字符串s:列表){
系统输出打印项次;
}
}
}
}
所以我的问题是当我使用tl1.list.clear()清除tl1.list时;然后打印值,它是清除的,但当我将null分配给此tl1.list时,它将如何打印值?

tl1.list.clear()
清除添加到
mainList
的列表。因为Java是面向对象的
list
mainList。get(0)
引用完全相同的对象。如果将
tl1.list
设置为null,则仅取消对对象的引用,该对象仍在
mainList
中可用

我不确定我是否理解了你的问题,但我猜这就是你问的…

tl1.list.clear()
清除添加到
mainList
的列表。因为Java是面向对象的
list
mainList。get(0)
引用完全相同的对象。如果将
tl1.list
设置为null,则仅取消对对象的引用,该对象仍在
mainList
中可用


我不确定我是否理解您的问题,但我想这就是您所问的…

为任何集合指定一个null并不意味着将删除与其关联的元素。这只意味着你不再需要那个对象了。现在由垃圾收集器来取消引用这个对象。如果在空赋值打印语句之间有大量语句,这可能会导致问题,因为GC可能有时间取消引用它。

我希望我的回答能帮助您理解这一点。

为任何集合指定一个null,并不意味着将删除与其关联的元素。这只意味着你不再需要那个对象了。现在由垃圾收集器来取消引用这个对象。如果在空赋值打印语句之间有大量语句,这可能会导致问题,因为GC可能有时间取消引用它。

我希望我的回答能帮助你理解这一点。

你问的不清楚,也许你认为clear()删除了对象-那不是真的,它会使列表变空。

你问的不清楚,也许你认为clear()删除了对象-那不是真的,它使列表变为空。

i无论您在这里给出的答案是什么,我都会问这个问题,但当我将列表指定为空时,仍然会感到困惑,那么如何将其保留在主列表中?如果我只在for循环中遍历tl1.list,然后获取nullpointer异常,而不是不了解的tl1.mainList,则该值应为null。这就是面向对象的工作方式,将对象引用指定给变量。如果将变量设置为null(
tl1.list=null
),则仅删除引用。看一看.m问这个问题,不管你在这里给出了什么答案,但是当我将列表指定为空时,仍然会感到困惑,那么如何保持在mainList中呢?如果我只在for循环中遍历tl1.list,然后获取nullpointer异常,而不是不了解的tl1.mainList,则该值应为null。这就是面向对象的工作方式,将对象引用指定给变量。如果将变量设置为null(
tl1.list=null
),则仅删除引用。看一看这张照片。