Sobes.tech
Junior

Ce sunt tipurile de date de referință?

sobes.tech AI

Răspuns de la AI

Tipurile de date de referință stochează nu valoarea în sine, ci o referință (adresă în memorie) către locul unde se află această valoare.

Caracteristici:

  • Variabilele de tip referință pot stoca o referință către null.
  • Când se atribuie valoarea unei variabile de tip referință alteia, nu se copiază valoarea în sine, ci referința. Ambele variabile indică același loc în memorie.
  • Modificările făcute printr-o referință vor fi vizibile și prin cealaltă, dacă indică același obiect.
  • Memoria pentru obiectele de tip referință este gestionată de garbage collector.

Exemple de tipuri de date de referință:

  • Șiruri de caractere (String)
  • Array-uri
  • Obiecte de clase personalizate
  • Delegați (în unele limbaje)

Diferențe față de tipurile de date de valoare:

Caracteristică Tipuri de date de valoare Tipuri de date de referință
Stocare Valoarea în sine O referință către valoare
Copiere Se copiază valoarea în sine Se copiază referința
Modificare Modificările în copie nu afectează originalul Modificările printr-o referință sunt vizibile și în cealaltă (dacă indică același obiect)
Memorie Gestionată de stivă (de obicei) Gestionată de heap, eliberată de garbage collector
Exemple int, float, bool, struct (în unele limbaje) String, Array, Object
// Exemplu în C#
string s1 = "Hello"; // s1 stochează o referință la șirul "Hello"
string s2 = s1;      // s2 acum stochează aceeași referință ca și s1

// La modificare, nu va fi vizibilă prin cealaltă referință,
// deoarece șirurile în C# sunt imutabile.
// La modificare, se creează un nou șir și referința este reasignată.
s1 = "World"; 

Console.WriteLine(s2); // Afișează "Hello"

int[] arr1 = { 1, 2, 3 }; // arr1 stochează o referință la array-ul {1, 2, 3}
int[] arr2 = arr1;     // arr2 acum stochează aceeași referință

arr2[0] = 10;          // Modificare prin arr2

Console.WriteLine(arr1[0]); // Afișează 10, modificarea fiind vizibilă și prin arr1

// Exemplu în Java
String s1 = "Hello"; // s1 stochează o referință la șirul "Hello"
String s2 = s1;      // s2 acum stochează aceeași referință ca și s1

// Șirurile în Java sunt imutabile.
// La modificare, se creează un nou șir și referința este reasignată.
s1 = "World"; 

System.out.println(s2); // Afișează "Hello"

int[] arr1 = { 1, 2, 3 }; // arr1 stochează o referință la array-ul {1, 2, 3}
int[] arr2 = arr1;     // arr2 acum stochează aceeași referință

arr2[0] = 10;          // Modificare prin arr2

System.out.println(arr1[0]); // Afișează 10, modificarea fiind vizibilă și prin arr1