Sobes.tech
Middle

Welche Unterschiede bestehen zwischen Werttypen und Referenztypen in Programmiersprachen?

sobes.tech KI

Antwort von AI

Werttypen (z.B. struct, enum, grundlegende numerische Typen) speichern ihren Wert direkt. Beim Zuweisen oder Übergeben an eine Funktion wird eine Kopie des Wertes erstellt.
Referenztypen (z.B. class, function, closure) speichern eine Referenz auf den Speicherort, an dem der Wert selbst liegt. Beim Zuweisen oder Übergeben wird eine Kopie der Referenz erstellt, die auf denselben Wert im Speicher zeigt.

Hauptunterschiede:

Merkmal Werttyp Referenztyp
Speicherweise Der Wert wird direkt in der Variablen gespeichert Die Variable speichert eine Referenz auf den Wert
Zuweisung Der Wert wird kopiert Die Referenz wird kopiert (zeigt auf dasselbe Objekt)
Änderung Änderungen an der Kopie beeinflussen das Original nicht Änderungen per Referenz beeinflussen das Original
Speicherort Normalerweise im Stack (bei lokalen Variablen) Normalerweise im Heap
Speicherverwaltung Automatisch (bei Verlassen des Gültigkeitsbereichs) ARC (Automatische Referenzzählung)

Beispiel in Swift:

// Werttyp
struct PointStruct {
    var x: Int
    var y: Int
}

var point1 = PointStruct(x: 1, y: 2)
var point2 = point1 // Wert wird kopiert
point2.x = 10

print(point1.x) // gibt 1 aus
print(point2.x) // gibt 10 aus

// Referenztyp
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 // Referenz wird kopiert
point4.x = 10

print(point3.x) // gibt 10 aus (Objekt wurde per Referenz geändert)
print(point4.x) // gibt 10 aus