【发布时间】:2012-08-28 15:43:41
【问题描述】:
我会快速解决这个问题。我有一个简单的课程
class Vector{
float x, y;
}
另一个类将这些对象的数组作为其成员
Vector[] buffer;
我这样初始化它:
buffer = new Vector[8];
for(Vector v: buffer)
v = new Vector();
但是当我尝试访问这个数组中的对象的成员时,我会直接得到一个 NullPointerException 到我的堆栈跟踪。也就是说,数组的对象还没有被构造。另一方面,这种更传统的代码却完美无缺:
buffer = new Vector[8];
for(int i = 0; i<8; i++)
buffer[i] = new Vector;
正如this讨论指出的那样,编译后两者应该相同。
我的问题是,为什么对于每个循环都无法从项目数组中初始化/构造对象?
【问题讨论】:
-
如果您在 for 循环中使用 buffer.length 而不是重复 8 ,那么它将始终与您的数组大小正确。否则,如果您更改一个 8 而不是另一个,那么您将错过结束元素或得到一个数组超出范围异常。
-
这只是为了举例。实际上,在 for 循环之前将 buffer.length 分配给变量并将其用于条件对于性能来说要好一些 - 几乎可以忽略不计 - 这是我的惯例。
-
好吧,甚至还有一个关于优化的问题stackoverflow.com/questions/1208320/…