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

时间:2014-03-28 15:34:41

标签: java

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

2 个答案:

答案 0 :(得分:9)

  

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

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

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

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

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

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

long[][] x = new long[2][];
x[0][0] = 7;

...将生成NullPointerException(在第二行),因为没有要访问的内部数组。

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

答案 1 :(得分:2)

当你写这篇文章时 - long[][] n= new long[1][];

您正在创建long 数组数组,但您实际上并未实际初始化数组

因此,如果您执行n[0] == null,则会返回true

这样你可以在以后的任何时间点自由地初始化新数组 -

n[0] = new long[10];

重点是 - 你需要在初始化数组时提供大小,这就是long[] n= new long[];错误的原因

相关问题