2010-05-31 29 views
17

Si utilizo una declaración en mi código comojava: matrices primitivas: ¿están inicializadas?

int[] a = new int[42]; 

Va a inicializar la matriz a nada en particular? (por ejemplo, 0) Me parece recordar que esto está documentado en alguna parte, pero no estoy seguro de qué buscar.

Respuesta

30

En 15.10 Array Creation Expressions el JLS dice

[...] una matriz unidimensional se crea de la longitud especificada, y cada componente de la matriz se inicializa a su valor por defecto

y al 4.12.5 Initial Values of Variables que dice:

Para el tipo int, el valor predeterminado es cero, es decir, 0.

+8

Tenga en cuenta que acabo de descubrir esto no es cierto para las matrices multidimensionales. – ripper234

+1

http://stackoverflow.com/questions/4994421/are-multi-dimensional-arrays-zero-inited – ripper234

5

Cuando se crean, las matrices se inicializan automáticamente con el valor predeterminado de su tipo, en su caso sería 0. El valor predeterminado es false para boolean y null para todos los tipos de referencia.

0

Todos los elementos de la matriz se inicializan a cero. No he podido encontrar pruebas de que en la documentación de Java, pero me acaba de ejecutar esta confirmar:

int[] arrayTest = new int[10]; 
System.out.println(arrayTest[5]) // prints zero 
+2

Probar una implementación específica no es una buena manera de verificar que cada implementación se comporte de esta manera. Es mejor verificar la documentación/especificación, ya que si no está especificada/documentada, otras implementaciones podrían manejarlo de manera diferente. Eso es más problema en otros lenguajes, porque Java tiene muy pocos lugares con comportamiento indefinido/específico de la implementación, pero sigue siendo cierto. –

+0

Además, si no está en la especificación, se puede cambiar el comportamiento en una versión más nueva de la misma implementación. – duduamar

+0

Además, su hipótesis de que otro método se comporta de una manera específica sin evidencia (println .. el método podría traducir nulo a 0, por ejemplo) –

4

La matriz se inicializa con 42 0s

Para otros tipos de datos que sería inicializado con el valor predeterminado, es decir.

new boolean[42]; // would have 42 falses 
new double[42]; // would have 42 0.0 (or 0.0D) 
new float[42]; // 42 0.0fs 
new long[42]; // 42 0Ls 

Y así sucesivamente.

Para los objetos en general sería nulo:

String [] sa = new String[42]; // 42 nulls 

Date [] da = new Date[42]; // 42 nulls