例如:为什么这个语句long[] n= new long[];
是错误的但是这个语句
long[][] n= new long[1][];
对吗?内存如何知道第二条语句中的对象需要分配多少内存?
最佳答案
How does the memory know how much memory needs to be assigned to the object in the second statement?
这里要记住两件事来弄清楚发生了什么:
- 二维 Java 数组不是正方形,它们是数组的数组。
- 您在创建数组时指定数组的大小。
所以在这个例子中,你正在创建一个长数组(大小为 1)来保存另一个长数组 - 但你还没有创建第二个数组(所以你不需要指定它有多大会。)实际上,第一个数组为内部数组提供了一个空的“插槽”(如果外部数组长于 1,则为插槽) - 但内部数组还没有已创建,因此不需要指定它们的大小。
它根本不只是创建一个任意长度的数组,它根本不创建任何内部数组。
如果您尝试在 2D 数组中访问或存储 long,您可能会更清楚地看到这一点:
long[][] x = new long[2][];
x[0][0] = 7;
...将产生一个NullPointerException
(在第二行),因为那里没有可访问的内部数组。
在第一个未编译的示例中,您试图实际创建一个 long 数组,但没有给它一个维度,因此出现错误。
关于java - 为什么在创建一维数组对象时需要定义数组长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22717131/