Sobes.tech
Intern

Mi a különbség az primitív és a referencia típusú adatok között?

sobes.tech MI

Válasz az MI-től

Az alapvető típusok közvetlenül tárolják az értéket, míg a referencia típusok egy hivatkozást (cím a memóriában) tárolnak az objektumra, amely az értéket tartalmazza.

Alapvető típusok:

  • Fix és kis memóriaigényűek.
  • Érték szerint kerülnek átadásra (az érték maga másolódik).
  • Kisbetűvel kezdődnek.
  • Tartalmazzák: byte, short, int, long, float, double, boolean, char.
// Példa egy primitív típusra
int a = 10;
int b = a; // A 10 érték másolódik
b = 20;   // Csak b változik, az a változatlan marad

Referencia típusok:

  • Különböző memóriamennyiséget foglalnak, az objektum tartalmától függően.
  • Hivatkozás (az objektum címe) szerint kerülnek átadásra. Az objektumon végzett módosítások hatással vannak minden olyan változóra, amely erre hivatkozik.
  • Általában nagybetűvel kezdődnek (osztályok).
  • Tartalmazzák: osztályokat (String, Object, egyedi osztályok), interfészeket, tömböket.
// Referencia típus példája
String str1 = new String("Hello");
String str2 = str1; // Másolódik a referencia a "Hello" objektumra
str2 = "World";   // str2 most egy új "World" objektumra hivatkozik. str1 továbbra is a "Hello"-ra.

// Egy másik példa módosítható objektummal
ArrayList<Integer> list1 = new ArrayList<>();
list1.add(1);
ArrayList<Integer> list2 = list1; // Másolódik a referencia ugyanarra az ArrayList objektumra
list2.add(2); // Elem hozzáadása az objektumhoz, amelyhez mindkét referencia hozzáfér
// Most a list1 [1, 2], a list2 pedig [1, 2]

Gyors összehasonlító táblázat:

Tulajdonság Primitív típusok Referencia típusok
Tárolás Érték Objektum referencia
Átadás Érték szerint Referencia szerint
Memória mérete Fix és kicsi Változó
Kezdőbetűvel kisbetű Általában nagybetűvel
Null érték lehetőség Nem lehet null Lehet null

A primitív típusokat wrapper osztályokba (pl. int-et Integer-be) csomagolják, hogy objektumként kezelhetők legyenek.