Quelle est l'initialisation par défaut d'un tableau en Java?

Donc je déclare et initialise un tableau int:

static final int UN = 0;
int[] arr = new int[size];
for (int i = 0; i < size; i++) {
    arr[i] = UN;
}

Dites que je fais cela à la place...

int[] arr = new int[5];
System.out.println(arr[0]);

... {[3] } imprimera à la sortie standard. Aussi, si je fais ceci:

static final int UN = 0;
int[] arr = new int[5];
System.out.println(arr[0]==UN);

... {[4] } imprimera à la sortie standard. Alors, comment Java initialise-t-il mon tableau par défaut? Est-il prudent de supposer que l'initialisation par défaut définit les indices du tableau sur 0, ce qui signifierait que je n'ai pas besoin de parcourir le tableau et de l'initialiser?

Merci.

114
demandé sur Hristo 2010-08-06 22:58:42

7 réponses

Tout dans un programme Java non explicitement défini sur quelque chose par le programmeur, est initialisé à une valeur nulle.

  • Pour les références (tout ce qui contient un objet) qui est null.
  • int/court/byte/long qui est un 0.
  • Pour float / double qui est un 0.0
  • Pour les booléens qui est un false.
  • Pour char qui est le caractère nul '\u0000' (dont l'équivalent décimal est 0).

Lorsque vous créez un tableau de quelque chose, toutes les entrées sont aussi remis à zéro. Donc votre tableau contient cinq zéros juste après sa création par new.

Note (basé sur les commentaires): La machine virtuelle Java n'est pas requise pour éliminer la mémoire sous-jacente lors de l'allocation de variables locales (cela permet des opérations de pile efficaces si nécessaire).

233
répondu Thorbjørn Ravn Andersen 2018-09-05 07:26:29

À partir de la spécification du langage Java :

  • Chaque variable de classe, variable d'instance ou composant de tableau est initialisée avec une valeur par défaut lors de sa création (§15.9, §15.10):

    • Pour le type d'octets, la valeur par défaut est zéro, c'est la valeur de (byte)0.
    • De type court, la valeur par défaut est zéro, c'est la valeur de (short)0.
    • pour le type int, la valeur par défaut est zéro, c'est-à-dire 0.
    • pour le type longtemps, la valeur par défaut est zéro, qui est, 0L.
    • pour le type float, la valeur par défaut est zéro positif, c'est-à-dire 0.0f.
    • pour le type double, la valeur par défaut est zéro positif, c'est-à-dire 0.0d.
    • pour le type char, la valeur par défaut est le caractère nul, c'est-à-dire '\u0000'.
    • pour le type booléen, la valeur par défaut est false.
    • Pour tous les types de référence (§4.3), la valeur par défaut est null.
52
répondu Dave Costa 2016-07-18 13:50:49

JLS dit clairement:

Un initialiseur de tableau crée un tableau et fournit des valeurs initiales pour tous ses composants.

Et ceci indépendamment du fait que le tableau soit une variable d'instance ou une variable locale ou une variable de classe.

Les valeurs par Défaut pour les types primitifs : docs

Pour les objets, les valeurs par défaut sont null.

16
répondu Aniket Thakur 2014-01-21 12:14:11

Thorbjørn Ravn Andersen a répondu pour la plupart des types de données. Comme il y avait une discussion animée sur array,

Citant la spécification jls http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.12.5 "le composant de tableau est initialisé avec une valeur par défaut lorsqu'il est créé"

Je pense que indépendamment du fait que le tableau soit local ou une instance ou une variable de classe, il le sera avec les valeurs par défaut

3
répondu nantitv 2016-05-18 06:11:23

Selon java,

Type de données-valeurs par défaut

Octet 0

Court - 0

Int-0

Long-0L

Float-0.0 f

Double-0.0 d

Char - '\ u0000 '

Chaîne (ou tout objet) - null

Booléen-faux

2
répondu Abhishek Singh 2014-01-28 10:35:52

Java indique que la longueur par défaut D'un tableau JAVA au moment de l'initialisation sera 10.

private static final int DEFAULT_CAPACITY = 10;

Mais la méthode size() renvoie le nombre d'éléments insérés dans le tableau, et depuis au moment de l'initialisation, si vous n'avez inséré aucun élément dans le tableau, il retournera zéro.

private int size;

public boolean add(E e) {
    ensureCapacityInternal(size + 1);  // Increments modCount!!
    elementData[size++] = e;
    return true;
}

public void add(int index, E element) {
    rangeCheckForAdd(index);
    ensureCapacityInternal(size + 1);  // Increments modCount!!
    System.arraycopy(elementData, index, elementData, index + 1,size - index);
    elementData[index] = element;
    size++;
}
2
répondu RAJIV GUPTA 2015-06-17 12:39:09

Chaque classe en Java a un constructeur ( un constructeur est une méthode qui est appelée lorsqu'un nouvel objet est créé , qui initialise les champs des variables de classe). Ainsi, lorsque vous créez une instance de la classe , la méthode constructeur est appelée lors de la création de l'objet et toutes les valeurs de données sont initialisées à ce moment-là .

Pour un objet de type tableau entier, toutes les valeurs du tableau sont initialisées à 0 (zéro) dans la méthode constructeur . De même pour l'objet de booléen tableau, toutes les valeurs sont initialisées à false .

Java initialise donc le tableau en exécutant sa méthode constructeur lors de la création de l'objet

2
répondu kkk 2015-06-18 21:13:30