2010-05-31 7 views
17

Si j'utilise une déclaration dans mon code commejava: tableaux primitifs - sont-ils initialisés?

int[] a = new int[42]; 

Sera-t-initialiser le tableau à quelque chose en particulier? (par exemple 0) Je semble me souvenir que cela est documenté quelque part mais je ne suis pas sûr de ce qu'il faut rechercher.

Répondre

30

A 15.10 Array Creation Expressions la JLS dit

[...] un réseau unidimensionnel est créé de la longueur spécifiée, et chaque composant de la matrice est initialisée à sa valeur par défaut

et à 4.12.5 Initial Values of Variables il dit:

Pour le type int, la valeur par défaut est zéro, c'est 0.

+8

Notez que je viens de découvrir ce n'est pas vrai pour les tableaux multidimensionnels. – ripper234

+1

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

5

Lors de leur création, les tableaux sont automatiquement initialisés avec la valeur par défaut de leur type - dans votre cas, il s'agit de 0. La valeur par défaut est false pour boolean et null pour tous les types de référence.

0

Tous les éléments de la matrice sont initialisés à zéro. Je ne l'ai pas été en mesure de trouver des preuves de cela dans la documentation Java mais je couru ce pour confirmer:

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

Le test d'une implémentation spécifique n'est pas un bon moyen de vérifier que chaque implémentation se comporte de cette manière. Il est préférable de vérifier la documentation/spécification, car si elle n'est pas spécifiée/documentée, d'autres implémentations peuvent la gérer différemment. C'est plus de problème dans d'autres langages, car Java a très peu d'endroits avec un comportement non défini/spécifique à l'implémentation, mais c'est toujours vrai. –

+0

En outre plus - si ce n'est pas dans la spécification - le comportement peut être changé sur une version plus récente de la même mise en œuvre. – duduamar

+0

En outre, vous faites des suppositions qu'une autre méthode se comporte d'une manière spécifique sans preuve (println .. la méthode pourrait traduire null à 0, par exemple) –

4

Le tableau sera initialisé avec 42 0s

Pour d'autres types de données, il serait initialisés avec la valeur par défaut

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 

Et ainsi de suite.

Pour les objets en général, il serait nul:

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

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