有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

C++在java中创建数组(2D)而不初始化内部数组

我想从N个(一维)数组构建一个二维数组。唯一的问题是,据我所知,在Java中声明多维数组的唯一方法是指定所有内部维度大小,然后创建这些子数组。在这种情况下,这似乎是浪费,因为它们将被覆盖

在C++中,我可以这样做:

Object** arr = new Object*[n];

for(int i=0;i<n; ++i)
{
      arr[i] = getObjArr();
}

在Java中,您必须这样说:

Object[][] arr = new Object[n][0]; //inner dimension is required

这些n个零长度数组中的每一个都将被创建,只会在填充数组时被覆盖。有没有一种方法可以在不分配内部数组的情况下声明多维数组(类似于C的指针到指针语法)


共 (2) 个答案

  1. # 1 楼答案

    当然。我不知道你为什么认为你必须这么做

       double[][] foo = new double[2][];
    

    很好。“内部”数组将为空

  2. # 2 楼答案

    内部尺寸不必指定。这在Java中是合法的:

    Object[][] arr = new Object[n][];
    

    这将创建一个n元素数组,其中每个元素都有类型Object[]。因为没有指定内部维度,所以这些n元素都被初始化为null。然后,可以将任何Object[]指定给这些n数组元素中的任何一个

    对于高维数组,规则(如果没有初始值设定项)是,可以说new T后跟一个或多个指定的维度([some-value]),对于未指定的维度,可以说[]后跟零个或多个[]。不能让[]后跟[value]