为什么我没有收到空指针异常



为什么,当我将一个对象添加到我的 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仍引用该对象。

相关内容

  • 没有找到相关文章