Java 在一行中创建数组

Java 在一行中创建数组,java,arrays,multidimensional-array,Java,Arrays,Multidimensional Array,我有密码 String ejgStr[] = new String[][]{{null},new String[]{"a","b","c"},{new String()}}[0] ; System.out.println(ejgStr[0]); 它编译时不会出错。 据我所知,你不能用不匹配的方括号创建数组 在左边,我们有字符串ejgStr[],它是一维数组,并且 右边是字符串[][{some array}[0],它是二维数组 它们似乎有不同的维度,但为什么要成功编译?您可以为ejgStr引

我有密码

 String ejgStr[] = new String[][]{{null},new String[]{"a","b","c"},{new String()}}[0] ;
 System.out.println(ejgStr[0]);
它编译时不会出错。 据我所知,你不能用不匹配的方括号创建数组

在左边,我们有字符串ejgStr[],它是一维数组,并且

右边是字符串[][{some array}[0],它是二维数组


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

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

新字符串[][]{…}
是一个二维数组。
新字符串[][]{…}[0]
是2D数组的第一个元素,该数组是1D数组。

这就是您分配给
String ejgStr[]

的内容。您将一维
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 };

字符串ejgStr[]
只是
堆空间中
变量的
引用。

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

最好使用
String[]ejgStr=
。另一个允许的符号是为了与C/C++兼容而添加的,对于新手或C/C++程序员来说是一个致命的赠品