分配数组

时间:2014-10-30 09:31:12

标签: java arrays string

当我准备参加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数组'的赋值感到困惑。

  1. 是单维数组还是二维数组?
  2. 作业右侧的[0]是什么意思?
  3. new String[] { "a", "b", "c" }如何运作?
  4. 提前致谢 GPAR

3 个答案:

答案 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[],其索引0null

最后,屏幕上会显示str[0]null

回答你的问题:

  1. 变量str是一维数组。符号String str[]非常难看且令人困惑;它应该是String[] str。然后你可以更容易地看到我们的变量是一维的。
  2. [0]表示获取数组的第一个元素(数组始终以索引0开头)。二维数组的某个元素总是一维数组;换句话说,二维数组是一个包含数组的数组 这就是String[] str = new String[][] { ... }[0]完全有效的原因。
  3. new String[] { "a", "b", "c" }创建一个包含三个字符串的字符串数组:" a"," b"和" c"。
    因此new String[] { "a", "b", "c" }[2]将返回" c"。
  4. 修改

    让我一步一步解释。

    第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],在其他地方声明。