Sobes.tech
Intern

Care este diferența dintre tipurile de date primitive și cele referențiale?

sobes.tech AI

Răspuns de la AI

Tipurile primitive stochează direct valoarea, în timp ce tipurile de referință stochează o referință (adresa în memorie) către obiectul care conține valoarea.

Tipuri primitive:

  • Ocupă o dimensiune fixă și mică în memorie.
  • Sunt transmise prin valoare (valoarea în sine este copiată).
  • Încep cu literă mică.
  • Include: byte, short, int, long, float, double, boolean, char.
// Exemplu de tip primitiv
int a = 10;
int b = a; // Se copiază valoarea 10
b = 20;   // Doar b se schimbă, a rămâne 10

Tipuri de referință:

  • Ocupă diferite cantități de memorie, în funcție de conținutul obiectului.
  • Sunt transmise prin referință (adresa obiectului este copiată). Modificarea obiectului prin referință afectează toate variabilele care îl indică.
  • Încep de obicei cu literă mare (clase).
  • Include: clase (String, Object, clase personalizate), interfețe, array-uri.
// Exemplu de tip de referință
String str1 = new String("Hello");
String str2 = str1; // Se copiază referința la obiectul "Hello"
str2 = "World";   // str2 acum indică un nou obiect "World". str1 încă indică "Hello".

// Alt exemplu cu un obiect mutabil
ArrayList<Integer> list1 = new ArrayList<>();
list1.add(1);
ArrayList<Integer> list2 = list1; // Se copiază referința la același obiect ArrayList
list2.add(2); // Se adaugă un element în obiectul accesibil prin ambele referințe
// Acum, list1 conține [1, 2] și list2 conține [1, 2]

Tabel comparativ rapid:

Proprietate Tipuri primitive Tipuri de referință
Stocare Valoare Referință la obiect
Transmitere Prin valoare Prin referință
Dimensiune memorie Fixă și mică Variabilă
Încep cu literă mică de obicei cu literă mare
Nullabilitate Nu pot fi null Pot fi null

Tipurile primitive sunt învelite în clase wrapper (cum ar fi Integer pentru int) pentru a putea fi manipulate ca obiecte.