为什么,当我添加一个对象时,我的ArrayList,它应该传递给对象的引用,然后我使对象等于null,它输出完全正常。
ArrayList<Test> testList = new ArrayList<>();
Test test = new Test();
System.out.println(test);
testList.add(test);
for(Test t : testList)
{
System.out.println(t);
}
test = null;
for(Test t : testList)
{
System.out.println(t);
}
测试构造函数如下:
int x = 0;
Test()
{
x = 50;
}
public String toString()
{
return x + "";
}
然而,输出是50,50,50 而不是50,50,null
答案 0 :(得分:3)
当您致电add
时,ArrayList
现在拥有对同一对象的引用。
test ----> Test() object
^
testList ----|
将参考test
设置为null
,不受影响。
test ----> null
testList ----> Test() object
答案 1 :(得分:2)
因为Java中的引用类型和值类型之间存在差异。
您将值(a.k.a.对象)的引用添加到列表中,然后删除引用。但是值仍然存在于内存中,并且列表仍然具有对该值的引用,尽管您的原始引用无效
答案 2 :(得分:1)
当您将对象的引用传递给ArrayList
时,您实际上创建了另一个ArrayList用来引用该对象的引用。
当您将null
分配给变量test
时,实际上“取消”了您的参考。参考数组列表没有任何反应。
更简单。
如果您有两个变量:一个和两个:
Test one = new Test()
Test two = one;
此时两个引用都指向同一个对象。
one = null;
现在one
为空,但two
仍然引用该对象。