我會盡快解決問題。我有一個簡單的類for each loop無法初始化數組中的對象
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而不是另一個,那麼你會錯過結束元素或者獲得一個數組超出界限的異常。 – n00begon
這只是爲了舉例。實際上,在for循環之前將buffer.length分配給變量並將其用於條件對於性能來說有點更好 - 幾乎可以忽略不計 - 這也是我的慣例。 – mehmetminanc
那麼,甚至有一個關於確切的優化問題http://stackoverflow.com/questions/1208320/what-is-the-cost-of-calling-array-length – n00begon