为什么,当我将一个对象添加到我的 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
当你调用 add
时,ArrayList
现在有自己的对同一对象的引用。
test ----> Test() object
^
testList ----|
将引用test
设置为 null
不会影响。
test ----> null
testList ----> Test() object
因为 Java 中的引用类型和值类型之间存在差异。
将对该值(也称为对象)的引用添加到列表中,然后删除该引用。但是,该值仍然存在于内存中,并且列表仍然具有对该值的引用,尽管您的原始引用无效
当你把对对象的引用传递给ArrayList
时,你实际上又创建了一个由 ArrayList 用来引用对象的引用。
当您将null
分配给变量test
实际上"取消"了引用。引用数组列表没有任何反应。
甚至更简单。
如果您有 2 个变量:1 和 2:
Test one = new Test()
Test two = one;
此时,两个引用都指向同一对象。
one = null;
现在one
为 null,但two
仍引用该对象。