【问题标题】:Instantiating JAVA Array of Generic Class实例化泛型类的JAVA数组
【发布时间】:2014-09-20 04:57:31
【问题描述】:
E[] arr = (E[])new Object[INITIAL_ARRAY_LENGTH];

以上代码取自this以下帖子:

其中E 是泛型类类型。当我们使用类型 Object 实例化数组时,编译器/JVM 如何知道它需要分配多少内存。我的理解是,类型转换只允许更改引用类型,而不是底层对象结构。

【问题讨论】:

    标签: java arrays generics instantiation allocation


    【解决方案1】:

    具有一定大小的引用类型的数组在内存中将占用相同的大小,无论它包含什么类型的对象。这是因为内存只保存引用(指针),仅此而已,而不是创建这些对象时分配的数组项的内存。然后堆将在新对象被创建并分配给数组时保存它们。

    因此,以下 数组 都将占用相同的大小:

    new Integer[10]
    new BigInteger[10]
    new String[10]
    new Object[10]
    

    请注意,对于编译器,非约束泛型类型的数组将转换为 Object 数组。

    另请注意,基元数组可能具有不同的内存占用。

    .....

    同样,这只是数组本身的内存,不是它引用的项目——这是所有这一切中非常重要的一点,可能是理解这一点最重要的一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-18
      • 1970-01-01
      • 1970-01-01
      • 2013-10-03
      • 2011-04-02
      • 1970-01-01
      相关资源
      最近更新 更多