Mi tufferò rapidamente al problema. Ho una classe sempliceper ogni ciclo non può inizializzare gli oggetti nell'array
class Vector{
float x, y;
}
e un'altra classe ha una serie di questi oggetti come suo membro
Vector[] buffer;
inizializzo così:
buffer = new Vector[8];
for(Vector v: buffer)
v = new Vector();
ma quando provo ad accedere i membri di questo oggetto in questo array ottengo una NullPointerException direttamente nella traccia dello stack. Cioè, gli oggetti dell'array non sono stati costruiti. D'altra parte questo codice più tradizionale funziona semplicemente perfetto:
buffer = new Vector[8];
for(int i = 0; i<8; i++)
buffer[i] = new Vector;
Come this discussione lo fa notare, entrambi dovrebbero essere lo stesso dopo la compilazione.
La mia domanda è, perché per ogni ciclo non riesce a inizializzare/costruire oggetti dall'array dell'articolo?
Se si utilizza buffer.length nel ciclo for invece di ripetere 8, sarà sempre corretto per la dimensione dell'array. Altrimenti se cambi un 8 e non l'altro, perderai gli elementi finali o otterrai un'eccezione fuori limite. – n00begon
Era solo per fare un esempio. Assegnare effettivamente buffer.length a una variabile prima del ciclo e utilizzarlo per la condizione è un po 'meglio per le prestazioni, quasi trascurabile, ed è la mia convenzione. – mehmetminanc
Beh, c'è persino una domanda su esattamente quell'ottimizzazione http://stackoverflow.com/questions/1208320/che-è-la-costo-di-calling-array-length – n00begon