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.