以下Java代码给出了输出1 2 3。代码如何执行?

时间:2019-07-17 11:08:23

标签: java arrays

在此for循环代码中如何运行3次,这里的argcopy数组大小为2,据我所知,一旦创建数组,其大小就无法更改。

class test {                                     //line 1
    public static void main(String[] args) {     //line 2
        String[][] argcopy = new String[2][2];   //line 3
        String arg[] = new String[3];            //line 4
        int x;                                   //line 5
        arg[0] = "1";                            //line 6
        arg[1] = "2";                            //line 7
        arg[2] = "3";                            //line 8
        argcopy[0] = arg;                        //line 9
        x = argcopy[0].length;                   //line 10
        for (int y = 0; y < x; y++)
        {
            System.out.println(" " + argcopy[0][y]);   //line 11
        }
    }
}

3 个答案:

答案 0 :(得分:2)

  

一旦创建数组,其大小便无法更改

是的,但是argcopy[0]是对String[](一个String数组)的引用。

分配给它时:

argcopy[0] = arg;

它引用的数组与最初引用的数组不同。它引用的原始数组的长度为2,而引用的新数组的长度为3

答案 1 :(得分:0)

argcopy[0] = arg;将数组arg设置为数组argcopy的第一个元素。

x = argcopy[0].length;x设置为数组argcopy的第一个元素的长度,即3。 由于您使用y < x测试了循环,因此循环将运行3次。

答案 2 :(得分:0)

2D数组只是数组的数组。这意味着您甚至不必为second dimension分配存储空间。这也使您可以得到参差不齐的数组,如下所示。

      int[][] raggedArray = new int[5][];
      raggedArray[0] = new int[]{1,2,3};
      raggedArray[1] = new int[]{4,5,6,7,8,9};
      raggedArray[2] = new int[]{10,12,13,14};
      raggedArray[3] = new int[]{15};
      raggedArray[4] = new int[]{16,17,18,19,20};
      for (int[] array : raggedArray) {
         System.out.println(Arrays.toString(array));
      }

每个新数组只是一个object,已分配给所需的位置。