1. Tableaux en mémoire

Dans les exemples précédents, les illustrations manquaient un peu de précision.

Lors de la création de tableaux (comme lors de la création de chaînes), deux blocs de mémoire distincts sont alloués : un pour stocker le tableau (conteneur) lui-même et un second bloc pour la variable qui stocke son adresse . L'image ci-dessous représente cette précision :

Tableaux en mémoire

La mémoire allouée pour le tableau d' 10 intéléments et la int[]variable qui stocke l' adresse du inttableau, est indiquée en vert.

A titre de comparaison, une variable ordinaire intstockant la valeur 199est représentée en bleu.

Cela rappelle un peu le stockage de chaînes en mémoire, vous ne pensez pas ?

C'est vrai, les cordes. Et tout comme lorsque vous travaillez avec des chaînes, vous pouvez assigner des variables de tableau les unes aux autres :

Code Explication
int[] a = new int[10];
a[2] = 4;
a[7] = 9;
int[] b = a;

a[9] = b[2] + a[7];
Créer un tableau d' 10 intéléments.
Attribuez la valeur 4à la cellule avec index 2.
Attribuez la valeur 9à la cellule avec index 7.
Dans la bvariable, enregistrez l'adresse stockée dans la avariable.
Maintenant aet bpointez sur le même objet tableau en mémoire.
Dans la cellule de l'objet tableau avec index 9, écrivez la somme des valeurs stockées dans les cellules 2(qui stocke la valeur 4) et 7(qui stocke la valeur 9).

L'objet tableau reste là où il était, et les variables aet bstockent la même adresse (référence) au même objet. Regarde l'image:

Tableaux en mémoire 2

2. Plus de détails sur l'utilisation des tableaux

Vous pouvez créer un tableau d'éléments de n'importe quel type. Pour ce faire, écrivez simplement des crochets après le nom du type. En général, la création d'un tableau ressemble à ceci :

type[] name = new type[number];

type est le type des éléments que nous allons stocker dans le tableau. Name est le nom de la variable que nous utiliserons pour faire référence au tableau, et number est le nombre de cellules dans le tableau.

L'exemple ci-dessus est la forme canonique pour créer une variable tableau et un objet tableau. En réalité, ce sont deux entités distinctes.

Vous pouvez créer une variable tableau séparément d'un objet tableau :

type[] name;
name = new type[number];

Et encore un point non négligeable :

Vous pouvez utiliser des variables ou même des expressions entières comme tableau d'index et nombre d'éléments du tableau .

Exemples:

Code Explication
int n = 100;
int[] a = new int[n];
Créer un tableau d' néléments
int n = 100;
int[] a = new int[n * 2 + 3];
Créer un tableau avec 203des éléments
int n = 100;
int[] a = new int[n];
a[n-1] = 2;
a[n-2] = 3;
a[n/5] = a[n-1] + a[n-2]


// a[99] = 2;
// a[98] = 3;
// a[20] = a[99] + a[98];
Important:
Soit dit en passant, vous devez savoir que si vous essayez d'accéder à une cellule du tableau en utilisant un index qui n'existe pas pour le tableau (dans notre exemple, cela signifie tout entier qui n'est pas dans la plage ), alors le programme plantera avec 0..99un ArrayIndexOfBoundException, ce qui signifie que l'index était en dehors des limites du tableau.

3. Longueur du tableau

Comme vous l'avez vu dans l'exemple précédent, vous pouvez créer une variable tableau par elle-même, puis lui affecter ultérieurement une valeur (une référence à un objet tableau) quelque part dans le code. Vous pouvez même faire ceci :

Code Explication
int[] array;
if (a < 10)
   array = new int[10];
else
   array = new int[20];
Créez une variable tableau dont le type est int[]
Si la avariable est inférieure à 10,
créez un tableau d' 10éléments.
Sinon
créer un tableau d' 20éléments

Et maintenant, que pouvez-vous faire d'autre avec un tel tableau ? Comment savoir combien d'éléments il contient ?

Pour vous aider, les tableaux ont une propriété spéciale (variable) nommée length. Vous pouvez trouver la longueur d'un tableau à l'aide de cette expression :

array.length;

Voici arrayle nom de la variable tableau et lengthest le nom de la propriété du tableau. La valeur de la lengthpropriété ne peut pas être modifiée : la lengthpropriété elle-même peut être affectée à d'autres variables, mais rien ne peut lui être affecté (si vous essayez de le faire, le programme ne compilera tout simplement pas).

On peut continuer avec l'exemple précédent comme ceci :

Code Explication
int[] array;
if (a < 10)
   array = new int[10];
else
   array = new int[20];
for (int i = 0; i < array.length; i++)
{
   System.out.println(array[i]);
}
Créez une variable tableau dont le type est int[]
Si la avariable est inférieure à 10,
créez un tableau d' 10éléments.
Sinon
créer un tableau d' 20éléments
Boucler sur tous les éléments du tableau : de 0à longueurarray.length - 1

4. Résumé des faits sur les tableaux en Java

Récapitulons ce que nous savons sur les tableaux :

Fait 1. Un tableau se compose de plusieurs cellules.

Fait 2. Vous accédez à une cellule spécifique en utilisant son numéro (index).

Fait 3. Toutes les cellules sont du même type.

Fait 4. La valeur initiale de toutes les cellules est 0 (si les cellules stockent des nombres), null(si les cellules stockent des références d'objet) ou false(si les cellules stockent booleandes valeurs). Vous en apprendrez plus sur les valeurs par défaut dans ce chapitre .

Le fait 5. String[] list n'est que la déclaration d'une variable. Cela ne crée pas le conteneur (objet tableau) lui-même. Pour utiliser la variable, vous devez d'abord créer un tableau (conteneur) et l'affecter à la variable. Voir l'exemple ci-dessous.

Fait 6. Lorsque nous créons un objet tableau (conteneur), nous devons indiquer sa taille, c'est-à-dire le nombre de cellules qu'il contient. Cela se fait avec une instruction comme : new TypeName[n];

Fait 7. La longueur d'un tableau peut être trouvée en utilisant la .lengthpropriété.

Fait 8. Après avoir créé un tableau, vous ne pouvez pas modifier le type de ses éléments ou le nombre d'éléments qu'il stocke.

Code Explication
String s;
String[] list;
sest null
listestnull
list = new String[10];
int n = list.length;
La listvariable stocke une référence à un objet : un tableau de chaînes composé d' 10éléments.
nest10
list = new String[0];

Se réfère maintenant listà un tableau d' 0éléments. Le tableau existe, mais il ne peut stocker aucun élément.

list = null;
System.out.println(list[1]);
Une exception (erreur de programme) sera lancée, c'est-à-dire que le programme plantera. liststocke une référence ànull
list = new String[10];
System.out.println(list[10]);
Une exception de tableau hors limites (erreur de programme) sera générée.
Si a liststocke 10des éléments/cellules, alors les indices valides sont : 0 1 2 3 4 5 6 7 8 910éléments.