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

标签 java

例如:为什么这个语句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/

相关文章:

java - 如何从目录和子目录中复制具有特定扩展名的所有文件?

java - 如何在 Lagom 的 REST API 路径中将请求参数设置为可选?

java - 从未使用过 Onpostexecute 方法

java - Java真的很慢吗?

java - 事件时间过期的消息导致 java 堆空间 OutOfMemory 错误

java - 在运行时从上传的文件覆盖 JCombox 值

java - org.openqa.selenium.InvalidSelectorException : invalid selector SyntaxError: Unexpected token } using XPath through Selenium Java

java - 将行插入数据库后 JTable 不更新

java - hibernate 内存管理

java - 如何在另一个 Activity 中显示点击的 ListView 项目