Voy a sumergirme rápidamente en el problema. Tengo una clase sencillapara cada bucle no puede inicializar objetos en la matriz
class Vector{
float x, y;
}
y otra clase tiene una serie de como su miembro de estos objetos
Vector[] buffer;
que inicializarlo como esto:
buffer = new Vector[8];
for(Vector v: buffer)
v = new Vector();
pero cuando intento acceder los miembros de este objeto en esta matriz obtengo una NullPointerException directamente a mi rastro de pila. Es decir, los objetos de la matriz no se han construido. Por otro lado este código más tradicional funciona simplemente perfecto:
buffer = new Vector[8];
for(int i = 0; i<8; i++)
buffer[i] = new Vector;
Como this discusión lo señala, ambos deben ser los mismos después de la compilación.
Mi pregunta es, ¿por qué para cada ciclo no puede inicializar/construir objetos de la matriz de elementos?
Si utiliza buffer.length en su bucle for en lugar de repetir 8, siempre será correcto para el tamaño de su matriz. De lo contrario, si cambia uno 8 y no el otro, perderá los elementos finales o obtendrá una matriz fuera de la excepción encuadernada. – n00begon
Fue solo por el bien del ejemplo. En realidad, asignar buffer.length a una variable before para loop y usarlo para la condición es un poco mejor para el rendimiento, casi insignificante, y es mi convención. – mehmetminanc
Bueno, incluso hay una pregunta sobre exactamente esa optimización http://stackoverflow.com/questions/1208320/what-is-the-cost-of-calling-array-length – n00begon