我在编程书中一直在提问,并遇到了这个问题:
以下代码的输出是什么?
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?,但我不认为这有助于我回答这个问题。
答案 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中观察到更改,因为它们指的是同一个对象。
希望这对你有帮助。快乐编码!!