Sobes.tech
Junior

Qu'est-ce que les types de données de référence ?

sobes.tech IA

Réponse de l'IA

Les types de données de référence stockent non pas la valeur elle-même, mais une référence (adresse en mémoire) à l'endroit où cette valeur se trouve.

Caractéristiques :

  • Les variables de type référence peuvent contenir une référence à null.
  • Lorsqu'une variable de type référence se voit attribuer la valeur d'une autre, ce n'est pas la valeur elle-même qui est copiée, mais la référence. Les deux variables pointent vers le même endroit en mémoire.
  • Les modifications effectuées via une référence seront visibles via l'autre, si elles pointent vers le même objet.
  • La mémoire pour les objets de types de référence est gérée par le ramasse-miettes.

Exemples de types de données de référence :

  • Chaînes (String)
  • Tableaux
  • Objets de classes personnalisées
  • Délegués (dans certains langages)

Différences avec les types de données de valeur :

Caractéristique Types de données de valeur Types de données de référence
Stockage La valeur elle-même Une référence à la valeur
Copie La valeur elle-même est copiée La référence est copiée
Modification Les modifications dans la copie n'affectent pas l'original Les modifications via une référence sont visibles dans l'autre (si elles pointent vers le même objet)
Mémoire Gérée par la pile (habituellement) Gérée par le tas, libérée par le ramasse-miettes
Exemples int, float, bool, struct (dans certains langages) String, Array, Object
// Exemple en C#
string s1 = "Hello"; // s1 stocke une référence à la chaîne "Hello"
string s2 = s1;      // s2 stocke maintenant la même référence que s1

// Lorsqu'on modifie, cela ne sera pas visible via l'autre référence,
// car les chaînes en C# sont immuables.
// Lorsqu'une modification est effectuée, une nouvelle chaîne est créée et la référence est réaffectée.
s1 = "World"; 

Console.WriteLine(s2); // Affiche "Hello"

int[] arr1 = { 1, 2, 3 }; // arr1 stocke une référence à un tableau {1, 2, 3}
int[] arr2 = arr1;     // arr2 stocke maintenant la même référence

arr2[0] = 10;          // Modification via arr2

Console.WriteLine(arr1[0]); // Affiche 10, la modification est visible via arr1

// Exemple en Java
String s1 = "Hello"; // s1 stocke une référence à la chaîne "Hello"
String s2 = s1;      // s2 stocke maintenant la même référence que s1

// Les chaînes en Java sont immuables.
// Lorsqu'une modification est effectuée, une nouvelle chaîne est créée et la référence est réaffectée.
s1 = "World"; 

System.out.println(s2); // Affiche "Hello"

int[] arr1 = { 1, 2, 3 }; // arr1 stocke une référence à un tableau {1, 2, 3}
int[] arr2 = arr1;     // arr2 stocke maintenant la même référence

arr2[0] = 10;          // Modification via arr2

System.out.println(arr1[0]); // Affiche 10, la modification est visible via arr1