是否需要在重新创建对象之前使ArrayList无效?

时间:2013-09-18 09:46:00

标签: java object memory

我不确定它是否会消耗更多&使用arraylist时会有更多的记忆力。通过下面的代码块我很困惑:

headerRow = new ArrayList<>();
headerRow.add("");
xlHeader.add(headerRow);

// headerRow = null;                     //<----- This is the line of confusion.
headerRow = new ArrayList<>();

headerRow应该无效吗?

添加到headerRow的空字符串对象(“”)会发生什么?

5 个答案:

答案 0 :(得分:3)

headerRow将引用新创建的ArrayList,旧的将注册到垃圾收集。

因此,不需要无效。

此外,

headerRow = new ArrayList<>(); // in JDK 7

而不是

headerRow = new ArrayList();

是实例化的正确语法。

答案 1 :(得分:2)

这不是必需的,它将引用新创建的对象。变量headerRow将引用新创建的ArrayList

所以你可以直接使用headerRow = new ArrayList();

答案 2 :(得分:1)

你只需使用

headerRow = new ArrayList();

之前无需取消它, JVM 管理它。

在前两行代码中

List<String> headerRow = new ArrayList<String>();
headerRow = new ArrayList();

第二行是多余的。没有必要写headerRow = new ArrayList();

由于您已在前一行初始化。

答案 3 :(得分:0)

我不知道你为什么要这样做:

List<String> headerRow = new ArrayList<String>();
// First one is correct; lose the line that follows.
headerRow = new ArrayList();

答案 4 :(得分:0)

此操作对性能没有任何影响。

当我们以控制形式使用它时,我们可以将null设置为不再执行动作。

例如

   Closable stream = getStream();

  try {
    stream.close();
    stream = null;
  catch(Exception e) {
    log(e);
  } finally {
    if(stream != null) {
      try { stream.close(); } catch(Exception empty) {}
    }
  }