当我准备参加java认证考试时,我看到了这个片段。任何人都可以解释一下这是如何工作的?
public static void main(String args[]) {
String str[] = new String[][] {
{ null },
new String[] { "a", "b", "c" },
{ new String() }
}[0];
System.out.println(str[0]);
}
o / p是预期的null
,但我对String
数组'的赋值感到困惑。
[0]
是什么意思?new String[] { "a", "b", "c" }
如何运作?提前致谢 GPAR
答案 0 :(得分:2)
我将声明分成多行,提高了可读性
// First, the array is created, then it is stored into a variable.
// At last, store the result of code below into a String[].
String str[] =
// Create a two-dimensional array
new String[][] {
// Add the first element to the two-dimensional array,
// which is in fact a String[] with one null element in it.
/* element #0 */ new String[] { null },
// Add the second element to the two-dimensional array:
// it's a String[] containing three strings
/* element #1 */ new String[] { "a", "b", "c" },
// Then add the third element to the two-dimensional array,
// which is an empty string.
/* element #2 */ new String[] { new String() }
}
// Then get the first element of our two-dimensional array,
// which returns a String[] with one null element in it.
[0];
事实上,变量str
现在包含String[]
,其索引0
为null
。
最后,屏幕上会显示str[0]
,null
。
回答你的问题:
str
是一维数组。符号String str[]
非常难看且令人困惑;它应该是String[] str
。然后你可以更容易地看到我们的变量是一维的。[0]
表示获取数组的第一个元素(数组始终以索引0开头)。二维数组的某个元素总是一维数组;换句话说,二维数组是一个包含数组的数组
这就是String[] str = new String[][] { ... }[0]
完全有效的原因。new String[] { "a", "b", "c" }
创建一个包含三个字符串的字符串数组:" a"," b"和" c"。new String[] { "a", "b", "c" }[2]
将返回" c"。让我一步一步解释。
第1步 - 这是我们声明String [](String数组)的方式:
String[] myArray = new String[numberOfElements];
第2步 - 我们也可以立即使用值初始化数组:
String[] myArray = new String[] {
"some value",
"another value",
"et cetera"
};
步骤2b - 我们不需要提及元素的数量,因为编译器已经看到我们用三个元素初始化数组
String[] myArray = new String[3] {
// ^
"some value", // That number
"another value", // is unnecessary.
"et cetera"
};
第3步 - 因为我们声明了数组并立即初始化它,所以我们可以省略new
语句:
String[] myArray = {
"some value",
"another value",
"et cetera"
};
第4步 - 接下来,我们有一个二维数组,它只不过是一个数组数组。
我们可以先初始化一维数组,然后将它们一起转储到二维数组中,如下所示:
String[] firstThree = { "a", "b", "c" };
String[] lastThree = { "x", "y", "z" };
String[][] myArray = new String[] {
firstThree,
lastThree
};
第5步 - 但我们也可以立即这样做:
String[][] myArray = new String[] {
new String[] { "a", "b", "c" },
new String[] { "x", "y", "z" }
};
第6步 - 现在我们说我们可以省略new
语句(参见步骤3),因为数组在初始化后立即初始化:
String[][] myArray = {
{ "a", "b", "c" },
{ "x", "y", "z" }
};
第7步 - 对吗?
第8步 - 现在我们有您的代码:
String str[] = new String[][] {
{ null },
new String[] { "a", "b", "c" },
{ new String() }
}[0];
System.out.println(str[0]);
让我们重写你的代码;实际上它和你的代码一样。
// Let us define a new two-dimensional string array, with space for three elements:
String[][] our2dArray = new String[3][];
// Then, let us fill the array with values.
// We will add a String array with exactly one element (that element is `null` by chance)
our2dArray[0] = new String[] { null };
// We define the contents for index 1 of our2dArray
our2dArray[1] = new String[] { "a", "b", "c" };
// At last, the last element:
our2dArray[2] = new String[] { new String() };
// Which is effectively the same as
// new String[] { "" };
到目前为止,我们已经初始化了数组。
第9步 - 但是,你看到这个片段了吗?:
}[0];
第10步 - 这意味着我们只需获取新创建的数组的第一个元素,并将 该元素 存储到名为{的着名变量中{1}}!
str
第11步 - 如果我们打印String[] str = our2dArray[0]; // Variable str now contains a
// String array (String[]) with exactly one null-element in it.
// With other words:
// str = String[] {
// 0 => null
// }
数组的索引0,我们会得到str
。
null
第12步 - 你明白了吗?
答案 1 :(得分:0)
1> str
是一维数组
2 - ; [0]
返回数组的第一个元素(在本例中是另一个数组)
3> new String[]{"a","b","c"}
创建并初始化字符串数组,以便它包含3个指定的字符串 - this question的答案可能会帮助您使用各种语法规则
答案 2 :(得分:0)
这是非常难看的代码。
这个String str[]=new String[][]{{null},new String[]{"a","b","c"},{new String()}}[0];
使用一些初始化创建并初始化一个锯齿状的2d数组String,[0]用于选择要分配给新str
变量的第0个String [](值将为是{null})。
第二行打印一些值s [0],在其他地方声明。