Java对象数组崩溃

Bat*_*ude 4 java

Java noob问题:

考虑以下C数组和初始化代码:

struct {
  int x;
  int y;
} point_t;

point_t points[1000];
Run Code Online (Sandbox Code Playgroud)

简单.这会在加载时创建并分配内存.

现在考虑Java中的类似内容:

public class point_t
{
   public int x;
   public int y;
}

point_t points[] = new point_t[1000];
// Without this loop, java will crash when you run this
for (int i=0; i<1000; i++)
{
   points[i] = new point_t;
}
points[0].x = 10;  // Crash would occur here without above loop
points[1].x = 10;
Run Code Online (Sandbox Code Playgroud)

最初我的java程序崩溃了一个空指针取消引用.问题是,来自C++,我不知道你必须创建1000个point_t对象.只是一个评论,但这似乎是INSANE.假设阵列大小为100万或10亿.在运行时使用空条目"创建"此数组只需要几秒钟.在C++中,它都发生在加载时.我承认你并不总是知道C++数组的单元格中会有什么,但在我工作的嵌入式系统中,内存通常被自动初始化为零,因此它可以工作.

那么,当你有一个对象数组时,有没有更简单,更快捷,更有效的Java方法来创建数组并分配内存?或者我在上面的代码中做错了什么?

Ray*_*oal 7

由于您来自C++背景,这可能会有所帮助.在Java中,当你写

point_t points[] = new point_t[1000];
Run Code Online (Sandbox Code Playgroud)

这类似于用C++编写,

point_t* points[] = new point_t*[1000];
Run Code Online (Sandbox Code Playgroud)

也就是说,在Java中,当您创建数组时,您不是创建点对象数组,而是创建点引用数组,就像在C++中创建点指针数组一样.

Java是一种托管(垃圾收集)语言; 这就是Java程序员所期望的.

至于问题的第二部分,如何自己创建对象,你做的很好.在循环中创建1000个点对象并加载它们.如果你想要更短的代码,你可以编写一个很好的方法来完成这项工作.:)

您还可以查看可能具有这些便利工厂方法的其他集合库.