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

时间:2015-06-02 16:42:48

标签: java arrays

我在编程书中一直在提问,并遇到了这个问题:

  

以下代码的输出是什么?

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;

基本上是将具有6个0元素的第一个数组调整为具有2个元素的数组:1和2。

我不理解什么?是吗

array[0] = x;

正在制作它实际上只是改变了第一个数组的索引0元素和索引1元素?并将索引2,3,4,5元素保持为数组[0]中的0?

我发现了这个问题Resize an Array while keeping current elements in Java?,但我不认为这有助于我回答这个问题。

2 个答案:

答案 0 :(得分:11)

这一行

array[0] = x;

没有调整数组array[0]的大小;它正在替换数组array[0],以便array现在是

12
000000
000000
000000
000000

旧的array[0]现在被丢弃,它将被垃圾收集。现在array[0]x引用相同的数组对象{1, 2}

答案 1 :(得分: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中观察到更改,因为它们指的是同一个对象。 希望这对你有帮助。快乐编码!!