在Java中调整二维数组的大小

7
我一直在做编程书中的练习题,遇到了这个问题:

以下代码的输出结果是什么?

int[][] array = new int[5][6];
int[] x = {1, 2};
array[0] = x;
System.out.println("array[0][1] is " + array[0][1]);

这本书的答案是:

array[0][1] 等于 2

到目前为止,我所学到的是改变数组的大小是不可能的。 根据我对这个问题的理解,

int[][] array = new int[5][6]

创建了5个包含6个元素的数组,如果在控制台上显示,它们默认会显示0。
000000
000000
000000
000000
000000

现在我所了解的是:
array[0] = x;

基本上是将具有六个元素的第一个数组调整大小为只有两个元素:1和2的数组。

我没有理解什么?是什么呢?

array[0] = x;

这是否意味着将仅更改第一个数组的索引0元素和索引1元素?并将数组[0]中的索引2、3、4、5元素保留为0?

我在这个问题Resize an Array while keeping current elements in Java?上找到了答案,但我不认为它能帮助我回答这个问题。

2个回答

12

这一行

array[0] = x;

并非调整数组array[0]的大小;它是替换了数组array[0],以使得array现在如下:

12
000000
000000
000000
000000

旧的array[0]现在被丢弃了,它将被垃圾回收。现在array[0]x指向同一个数组对象{1, 2}


1
array[0]=x

这行代码没有调整数组大小,它让数组[0]和x引用了同一个对象。为了让您的概念更清晰,我会包含一段示例代码。
        int[][] array = new int[5][6];
        System.out.println("Initial length");

        for(int i=0;i<array.length;i++)
            System.out.println("length of array["+i+"] is " +array[i].length);

        int[] x = {1, 2};
        array[0] = x;//This line makes array[0] and x to refer to the same object

        System.out.println("After changes made");

        for(int i=0;i<array.length;i++)
            System.out.println("length of array["+i+"] is " +array[i].length);

        System.out.println("array[0][1]= "+array[0][1]);
        //changing the content of object referred by x

        x[0]=3;
        x[1]=6;

        System.out.println("After changing X");
        System.out.println("array[0][0]= "+array[0][0]+" array[0][1]="+array[0][1]);

输出

Initial length
length of array[0] is 6
length of array[1] is 6
length of array[2] is 6
length of array[3] is 6
length of array[4] is 6

After changes made

length of array[0] is 2
length of array[1] is 6
length of array[2] is 6
length of array[3] is 6
length of array[4] is 6

array[0][1]= 2

After changing content of object referred by x

array[0][0]= 3 array[0][1]=6

所以您可以观察到,在 array[0]=x 之后,如果您更改由 x 引用的对象的内容,则会在数组 array[0] 和 x 中观察到更改,因为它们都引用同一个对象。希望这可以帮助您。编码愉快!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接