Sobes.tech
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