在一行中创建数组

时间:2016-07-15 08:04:02

标签: java arrays multidimensional-array

我有一个代码

 String ejgStr[] = new String[][]{{null},new String[]{"a","b","c"},{new String()}}[0] ;
 System.out.println(ejgStr[0]);

编译没有错误。 据我所知,你不能创建一个带有不匹配方括号的数组。

在左边,我们有String ejgStr [],它是一维数组和

在右边,我们有String [] [] {some array} [0],这是2-d数组

这些似乎有不同的维度,但为什么它们成功编译?

4 个答案:

答案 0 :(得分:2)

您正在为内联二维String[]数组的第一维分配一维String[][]数组。看看评论:

String ejgStr[] =
    new String[][] {
                     { null },                   // a null 1D String array
                     new String[] {"a","b","c"}, // a 1D String array containing a,b,c
                     { new String() }            // a String array containing empty String
                   }[0];                         // access the { null } 1D array

我希望你的作业等同于这样做:

String ejgStr[] = { null };

答案 1 :(得分:1)

您将1D数组分配给ejgStr参考。如果查看第一个statemend的结尾,您将看到指定了[0]索引,这意味着您将第一个数组(位置0)分配给您的参考。如果删除[0],则会收到编译错误。

答案 2 :(得分:1)

new String[][]{...}是一个2D数组 new String[][]{...}[0]是2D数组的第一个元素,它是一维数组 这就是您分配给String ejgStr[]的内容。

答案 3 :(得分:-1)

String ejgStr[]只是reference中的variable heap space。 您使用[0]指向第一维2D维数组,并在ejgStr[]中引用它。从2D数组中获取1D并不常见,但如果需要,可以这样做,当然它不会造成编译错误。