为什么在创建一维数组对象时需要定义数组长度?

hid*_*ame 9 java

例如:为什么这句话long[] n= new long[];错了,但这句话 long[][] n= new long[1][];是对的?内存如何知道在第二个语句中需要为对象分配多少内存?

Mic*_*rry 9

内存如何知道在第二个语句中需要为对象分配多少内存?

要记住两件事要弄清楚发生了什么:

  • 2D Java数组不是正方形,它们是数组的数组.
  • 您可以在创建数组时指定数组的大小.

所以在这个例子中,你创建了一个longs数组(大小为1)来保存另一个long数组 - 但是你还没有创建第二个数组(所以你不需要指定它的大小. )实际上,第一个数组提供了一个空的"槽"(如果外部数组长于1,则为槽),内部数组可以放入 - 但内部数组尚未创建,所以不需要指定它们的大小.

它不仅仅创建一个任意长度的数组,它根本不会创建任何内部数组.

如果您尝试在2D数组中访问或存储long,则可以更清楚地看到这一点:

long[][] x = new long[2][];
x[0][0] = 7;
Run Code Online (Sandbox Code Playgroud)

...将产生NullPointerException(在第二行),因为没有内部数组可供访问.

在第一个没有编译的例子中,你试图实际创建一个long数组,但不给它一个维度,因此错误.