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