web-dev-qa-db-fra.com

Quelle est la valeur par défaut d'un membre dans un tableau?

J'instancie un tableau comme ceci:

int array[] = new int[4];

Quelles sont les valeurs par défaut pour ces quatre membres? Est-il nul, 0 ou n'existe pas?

25
dylanmensaert

C'est 0. Il ne peut pas être null, car null n'est pas une valeur int valide.

À partir de la section 7.6.10.4 de la spécification C # 5:

Tous les éléments de la nouvelle instance de tableau sont initialisés à leurs valeurs par défaut (§5.2).

Et de la section 5.2:

La valeur par défaut d'une variable dépend du type de la variable et est déterminée comme suit:

  • Pour une variable de type valeur, la valeur par défaut est identique à la valeur calculée par le constructeur par défaut du type valeur (§4.1.2).
  • Pour une variable de type référence, la valeur par défaut est null.

L'initialisation sur les valeurs par défaut est généralement effectuée en faisant en sorte que le gestionnaire de mémoire ou le collecteur de mémoire initialise la mémoire sur zéro, avant qu'elle ne soit attribuée. Pour cette raison, il est commode d'utiliser tout-bits-zéro pour représenter la référence null.

(En tant que détail d'implémentation, le premier point de puce présente quelques astuces. Bien que C # ne vous autorise pas à déclarer un constructeur sans paramètre pour les types de valeur, vous pouvez créer vos propres constructeurs sans paramètre pour les types de valeur dans IL. I ne croyez pas que ces constructeurs sont appelés dans l'initialisation d'un tableau, mais ils seront appelés dans une expression new X() en C #, mais ils sont en dehors du domaine de la spécification C #.)

47
Jon Skeet

La valeur par défaut d'une variable de type T initialisée automatiquement, telle qu'un élément de tableau ou un champ d'instance, est identique à la valeur de default(T). Pour les types de référence et les types de pointeur, c'est null. Pour les types numériques, c'est le zéro de ce type. Pour bool, c'est faux. Pour les types de structure, c'est la valeur de la structure qui a tous ses champs initialisés à leurs valeurs par défaut.

13
Eric Lippert

From Arrays (Guide de programmation C #) :

La valeur par défaut des éléments de tableau numériques est définie sur zéro et les éléments de référence sur null.

4
Douglas

Les entiers ne peuvent pas être NULL. Ils auront la valeur '0'. Même si vous essayez d'affecter NULL à un int à partir de code, vous ne pourrez pas le faire.

0
Ron