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方法来创建数组并分配内存?或者我在上面的代码中做错了什么?
由于您来自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个点对象并加载它们.如果你想要更短的代码,你可以编写一个很好的方法来完成这项工作.:)
您还可以查看可能具有这些便利工厂方法的其他集合库.
| 归档时间: |
|
| 查看次数: |
650 次 |
| 最近记录: |