Middle
Milyen különbségek vannak az értéktípus és a referencia típus között a programozási nyelvekben?
sobes.tech MI
Válasz az MI-től
Értéktípusok (például struct, enum, alapvető numerikus típusok) közvetlenül tárolják az értéküket. Hozzárendelés vagy átadás esetén másolat készül az értékről.
Referencia típusok (például class, function, closure) a memória azon helyére mutató hivatkozást tárolnak, ahol maga az érték található. Hozzárendelés vagy átadás esetén a hivatkozás másolódik, amely ugyanarra az értékre mutat a memóriában.
Fő különbségek:
| Jellemző | Értéktípus | Referencia típus |
|---|---|---|
| Tárolási mód | Az érték közvetlenül a változóban tárolódik | A változó a értékre mutató hivatkozást tárol |
| Hozzárendelés | Az érték másolódik | A hivatkozás másolódik (ugyanarra a objektumra mutat) |
| Módosítás | A másolat módosítása nem befolyásolja az eredetit | A hivatkozáson végzett módosítás az eredetit befolyásolja |
| Memória helye | Általában a veremben (lokális változók esetén) | Általában a heap-en |
| Memóriakezelés | Automatikus (a hatókör elhagyásakor) | ARC (Automatikus Hivatkozásszámlálás) |
Swift példával:
// értéktípus
struct PointStruct {
var x: Int
var y: Int
}
var point1 = PointStruct(x: 1, y: 2)
var point2 = point1 // érték másolása
point2.x = 10
print(point1.x) // 1-et fog kiírni
print(point2.x) // 10-et fog kiírni
// referencia típus
class PointClass {
var x: Int
var y: Int
init(x: Int, y: Int) {
self.x = x
self.y = y
}
}
var point3 = PointClass(x: 1, y: 2)
var point4 = point3 // hivatkozás másolása
point4.x = 10
print(point3.x) // 10-et fog kiírni (az objektum referencia által változott)
print(point4.x) // 10-et fog kiírni