可以在Java中改变N维数组的大小吗?

时间:2016-09-25 13:40:26

标签: java arrays

Java中的数组是一个对象。因此,如果我有一个2D数组double[][] matrix = new double[5][5],那么该数组的每一行都是一个引用内存中单维数组的对象。根据我的理解,一旦在java中设置了数组大小,就无法更改。所以让我声明一个1D数组double[] d = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}然后允许我设置matrix[1] = d,以便第1行现在指向内存中的d。我似乎没有真正修复数组大小。我可以将matrix声明为任意大小,只需将引用更改为指向不同大小的数组。如果matrix大小固定为5 x 5,我为什么允许这样做?

2 个答案:

答案 0 :(得分:5)

作业

double[][] matrix = new double[5][5];

实际上创建了6个数组对象。一个数组类型为double[]的数组(即双数组数组),长度为5,由matrix变量引用,5个数组类型为double的数组有一个长度5和matrix[0]...matrix[4]的参考文献。

正如您可以通过分配:

更改matrix变量以引用新数组
matrix = new double[10][10];

您还可以通过分配来更改任何引用matrix[i]以引用新数组:

matrix[i] = new double[6];

您没有更改任何现有阵列。您正在更改引用变量的值,该引用变量引用一个数组以引用不同的数组。

答案 1 :(得分:3)

简单地说:因为这就是Java的父亲使阵列工作的方式。

语法在那里提示:

double[][] matrix = new double[5][5]

你知道,5,5只会在右侧显示 !含义:数组维度部分"类型" 矩阵

关键是:没有真正的"多维" Java中的数组。没有办法说:这件事应该是" 5 x 5"。你总是得到一排"行&#34 ;;每行包含一列列。因此,这些列可以具有不同的长度,因为它们完全相互独立!