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