Java - 8.9 Types de référence et types de valeur en Java

Dans un programme Java, une variable de tableau ne contient pas directement les valeurs. Elle contient une référence, c'est-à-dire l'adresse de l'objet en mémoire. Cette notion explique pourquoi modifier un tableau peut changer une autre variable qui pointe vers lui.

Une référence est une adresse

Un tableau contenant cinq éléments se trouve à un endroit précis de la mémoire. La variable qui le désigne ne stocke pas le tableau lui-même : elle stocke son adresse, un peu comme le numéro d'une maison.

Quand on écrit une nouvelle variable égale à la première, on copie l'adresse et non le contenu. Les deux variables désignent alors le même objet.

int[] tableau1 = {1, 2, 3, 4, 5};
int[] tableau2 = tableau1;

Modifier un tableau modifie l'autre

La vidéo affiche les éléments des deux tableaux, puis modifie une valeur à travers l'un des deux. Le résultat est identique pour les deux, car ils pointent vers un seul objet en mémoire.

Ce comportement est propre aux types de référence. Il faut le garder en tête pour ne pas modifier involontairement des données partagées.

tableau2[0] = 10;
// tableau1[0] vaut maintenant aussi 10

En résumé

Une variable de type référence contient une adresse. Deux variables peuvent donc désigner le même tableau. Une modification faite par l'une se voit aussi par l'autre. Cette idée revient dans les leçons suivantes.

Points clés

  • Une référence contient l'adresse d'un objet en mémoire, et non l'objet lui-même.
  • Affecter un tableau à une autre variable copie la référence.
  • Deux variables peuvent désigner le même tableau.
  • Modifier un élément via l'une des variables change aussi l'autre.
  • Ce comportement est propre aux types de référence.

Questions fréquentes

Qu'est-ce qu'une référence ?

C'est l'adresse d'un objet en mémoire. La variable connaît donc l'emplacement de l'objet, sans le contenir.

Pourquoi les deux tableaux changent-ils en même temps ?

Ils pointent vers le même objet. Une modification faite sur cet objet est visible depuis les deux variables.

Comment obtenir un tableau indépendant ?

Il faut créer un nouvel objet et y recopier les valeurs, au lieu de copier seulement la référence.