【问题标题】:what kind of memory assigned to array object of size zero? [duplicate]为大小为零的数组对象分配了什么样的内存? [复制]
【发布时间】:2015-04-22 06:24:52
【问题描述】:

就我的理解而言,对象是任何实体的内存分配的同义词。

String array[]=new String[0];

由于数组的大小为零并且在数组的情况下不能增加,那么为这个零大小的数组对象分配了什么样的内存?

【问题讨论】:

  • 我以前问过这个问题。没有人这与我问的不同
  • 同一个元素的数组,减去元素。
  • 那么在 object.is 中剩下的内容是空的还是会保留一些其他信息,例如 gc、hashcode、size 等。

标签: java arrays string


【解决方案1】:

它通常用于表示数组中没有元素。这可以被认为比null 表示“无数据”更“友好”,允许迭代而不抛出异常:

for (int i=0; i<array.length; i++){
    // Do stuff, will not throw NullPointerException
}

如果需要,这也允许转换为List

【讨论】:

    【解决方案2】:

    仍然会分配内存,尽管数组中没有值,只有数组头。标头包含特定标志、数组长度以及数组类型(这里是Object)。编译器不会忽略这个数组,即使它的长度为零,因为它仍然可以被引用并且可以用System.arraycopy() 等调整大小。

    创建数组而不是将其设置为 null 的优点是它可以安全地遍历 for 循环而不会抛出 NullPointerException

    【讨论】:

    • System.arraycopy 不会调整数组的大小。
    【解决方案3】:

    一维数组是一个对象。正如预期的那样,该数组具有通常的对象头。但是,这个对象头是 12 个字节来容纳一个 4 字节的数组长度。

    参考: http://www.javamex.com/tutorials/memory/array_memory_usage.shtml

    希望能回答你的问题。

    【讨论】:

      猜你喜欢
      • 2018-09-25
      • 2018-10-08
      • 1970-01-01
      • 2021-10-16
      • 1970-01-01
      • 2014-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多