我有一个代码
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数组
这些似乎有不同的维度,但为什么它们成功编译?
答案 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并不常见,但如果需要,可以这样做,当然它不会造成编译错误。