web-dev-qa-db-fra.com

initialisation de tableau int

J'ai ici une question simple liée à Java . Disons que vous avez un tableau int comme variable d'instance:

int[] in = new int[5];

Donc, maintenant par défaut, il contient 5 zéros . Mais si vous avez le même tableau que la variable locale. Est-il initialisé à zéro? Ce n’est pas un devoir, j’apprends le langage Java .

22
uml

La première chose à savoir est que, local varibles sont stockés sur stack qui ne sont pas initialisés explicitement avec leurs valeurs par défaut. Alors que variables d'instance sont stockées sur Heap, elles sont initialisées par défaut avec leur valeur default

De même, objets sont également créés sur Heap, qu'une variable de référence d'instance contienne sa référence ou une variable de référence locale.


Maintenant, ce qui se passe est que, lorsque vous déclarez votre référence de tableau comme ceci en tant que variable locale et que vous l'initialisez avec un tableau: -

int[] in = new int[5];

La référence de tableau (in) est stockée sur stack et une mémoire est allouée pour un tableau capable de contenir 5 éléments entiers sur heap (les objets sont créés sur Heap). Ensuite, 5 emplacements de mémoire contigus (size = 5), pour stocker la valeur entier sont alloués sur Heap. Et chaque objet index sur un tableau contient une séquence reference pour ces emplacements de mémoire en séquence. Ensuite, la référence du tableau pointe vers ce tableau. Ainsi, étant donné que la mémoire pour 5 valeurs entières est allouée sur Heap, elles sont initialisées à leur valeur par défaut.

Et aussi, quand vous déclarez votre référence de tableau, et ne l'initialisez pas avec un objet de tableau: -

int[] in;

La référence au tableau est créée sur Stack (en tant que variable locale), mais elle n'est pas initialisée par défaut à un tableau, ni à null, comme c'est le cas avec les variables d'instance.


Voici comment se présente l'allocation lorsque vous utilisez la première méthode de déclaration et d'initialisation de tableau: -

"Your array reference"
     "on stack"    

       |    |          "Array object on Heap"
       +----+                  
       | in |---------->  ([0, 0, 0, 0, 0])
       +----+
       "Stack"                  "Heap"
52
Rohit Jain

C'est la même chose si vous faites: 

int[] in = new int[5] comme variable d'instance ou variable locale. L'objet tableau in contiendra des zéros dans les deux cas.

La différence serait si vous voulez faire quelque chose comme: 

  1. Variable d'instance: int[] in; (il est initialisé avec null ) et l'objet in vivra dans heap space.

  2. Variable locale: int[] in; (il doit être initialisé par l'utilisateur) vivra dans stack

5
Ioan

Pour les tableaux de type primitif, il est initialisé à ses valeurs par défaut . Dans la documentation , il est indiqué: 

un tableau à une dimension de la longueur spécifiée est créé, et chaque composant du tableau est initialisé à sa valeur par défaut

Pour le type entier, la valeur par défaut est 0.

3
Parvin Gasimzade

Oui, lorsque vous initialisez un tableau, le contenu sera défini sur la valeur par défaut de ce type. Pour int, il serait 0 et pour un type de référence, il serait null.

Si vous initialisez un tableau et examinez le contenu, vous pouvez le voir par vous-même:

...
final int[] in = new int[5];

for (int i = 0; i < in.length; i++) {
    System.out.println(in[i]);
}
...

Cela va imprimer:

0
0
0
0
0
2
Jonathan

oui

public void method() {
    int[] in = new int[5];
    System.out.pritnln(in[0]); //output in 0
}

Dans ce cas, votre tableau est une variable locale , tout ce dont vous avez besoin est de initialiser votre tableau . une fois que vous initialisez votre tableau, voila votre élément de tableau ** s obtient ses ** valeurs par défaut .

1
PermGenError

Peu importe que le tableau déclaré dans une variable d'instance ou une variable locale soit initialisé à la valeur par défaut.

Chaque variable de classe, variable d'instance ou composant de tableau est initialisé avec une valeur par défaut lors de sa création.

Selon JLS

An array initializer creates an array and provides initial values for all its components.

1
Aniket Thakur

Le tableau ne contient pas 5 zéros lorsque vous l'instanciez en tant que variable locale.

0
Ishan Khanna