当前位置: 首页 > 知识库问答 >
问题:

如何将列表中的所有对象设置为NULL?[副本]

翟沈义
2023-03-14

我正在尝试做一些清理方法。其中我有几个字段,我想调用它们各自的清理方法,然后将它们设置为NULL。

if(obj != null)
{
    obj.cleanUp();
    obj = null;
}
public void checkAndClean(ArrayList<Object> objs)
{
    for(Object obj : objs)
    {
        if(obj != null)
        {
            obj.clean();
            obj = null;
        }
    }
}

我将所有对象添加到ArrayList中,然后将其传递给该方法:

    ArrayList toClean = new ArrayList<Object>();
    toClean.add(obj1);
    toClean.add(obj2);
    checkAndClean(toClean);

然而,这并不起作用,我的单元测试显示,在调用此方法后,对象不为null。

如何将列表中的所有对象设置为NULL?

@Test
public void test()
{
    String string = "stuff";
    ArrayList toClean = new ArrayList<Object>();
    toClean.add(string);
    checkAndDestroy(toClean);
    assertEquals(null, string);
}

共有1个答案

翁文康
2023-03-14

obj是一个引用,将其设置为null不会改变ArrayList中的任何内容。

即使更改列表项,obj1和obj2也是对2个对象的引用。在ArrayList中,您将项的引用设置为null,但这不会更改obj1、obj2引用

 类似资料:
  • 问题内容: 如何在SQL表中将所有0值都设置为NULL? 提前致谢。 问题答案:

  • 我有一个带有自定义对象的列表,希望迭代它并将值设置为true/false。

  • 问题内容: 我最近正在研究释放Java对象占用的内存。这样做的时候,我对如何在Java中复制对象(浅/深)以及如何避免在使用中意外清除/无效化对象感到困惑。 请考虑以下情形: 将a 作为参数传递给方法。 将a传递给要由线程处理的可运行类。 将放入。 现在,在这些情况下,如果我调用或,对象将如何处理?在哪种情况下丢失对象,在哪种情况下仅将引用设置为null? 我想这与对象的浅层复制和深层复制有关,但

  • null 在这种情况下,如果我调用或,对象会发生什么?在哪种情况下,对象丢失了,在哪种情况下,只有引用被设置为NULL? 我想这与对象的浅层和深层复制有关,但在Java中,在哪些情况下浅层复制发生,在哪些情况下深层复制发生?

  • 尽管违反直觉,而且显然不是JPA标准所要求的,但Eclipselink和Hibernate都竭尽全力创建了以下NullPointerExceptions的源代码:当嵌入实体中的对象的所有字段都是null时,它们会将字段本身替换为null。下面是一个简化的例子: 我们的想法是,我们可以编写类似于。当直接访问字段时,我们会为此付出额外的间接代价:。这通常是一个很好的权衡,但当我们必须编写

  • 问题内容: 我有两个线程, 如果jvm首先执行thread1并将obj1设置为null,那么thread2会立即看到该更改,还是会花费一些时间,并且由于obj1还不为null,jvm仍可以运行thread2同步块吗? 问题答案: 这几乎肯定会破坏同步抽象- 我不敢相信会立即看到更改。您永远都不应更改要同步的对象的引用,更不要将其设置为,这将导致任何进一步尝试对其进行同步的尝试。