Junior
Was sind Referenzdatentypen?
sobes.tech KI
Antwort von AI
Referenztypen speichern nicht den Wert selbst, sondern eine Referenz (Adresse im Speicher) auf den Ort, an dem sich dieser Wert befindet.
Eigenschaften:
- Referenztypenvariablen können eine Referenz auf
nullspeichern. - Beim Zuweisen des Wertes einer Referenztypenvariablen an eine andere wird nicht der Wert selbst kopiert, sondern die Referenz. Beide Variablen zeigen auf denselben Speicherort.
- Änderungen, die über eine Referenz gemacht werden, sind über die andere sichtbar, wenn beide auf dasselbe Objekt zeigen.
- Der Speicher für Objekte von Referenztypen wird vom Garbage Collector verwaltet.
Beispiele für Referenztypen:
- Strings (
String) - Arrays
- Objekte benutzerdefinierter Klassen
- Delegates (in einigen Sprachen)
Unterschiede zu Werttypen:
| Merkmal | Werttypen | Referenztypen |
|---|---|---|
| Speicherung | Der Wert selbst | Eine Referenz auf den Wert |
| Kopieren | Kopiert den Wert selbst | Kopiert die Referenz |
| Änderung | Änderungen in der Kopie beeinflussen das Original nicht | Änderungen über eine Referenz sind in der anderen sichtbar (wenn beide auf dasselbe Objekt zeigen) |
| Speicher | Wird vom Stack verwaltet (normalerweise) | Wird vom Heap verwaltet, vom Garbage Collector bereinigt |
| Beispiele | int, float, bool, struct (in einigen Sprachen) |
String, Array, Object |
// Beispiel in C#
string s1 = "Hello"; // s1 speichert eine Referenz auf den String "Hello"
string s2 = s1; // s2 speichert jetzt die gleiche Referenz wie s1
// Beim Ändern ist die Änderung über die andere Referenz nicht sichtbar,
// weil Strings in C# unveränderlich sind.
// Beim Ändern wird ein neuer String erstellt und die Referenz neu zugewiesen.
s1 = "World";
Console.WriteLine(s2); // Gibt "Hello" aus
int[] arr1 = { 1, 2, 3 }; // arr1 speichert eine Referenz auf das Array {1, 2, 3}
int[] arr2 = arr1; // arr2 speichert jetzt die gleiche Referenz
arr2[0] = 10; // Änderung über arr2
Console.WriteLine(arr1[0]); // Gibt 10 aus, die Änderung ist über arr1 sichtbar
// Beispiel in Java
String s1 = "Hello"; // s1 speichert eine Referenz auf den String "Hello"
String s2 = s1; // s2 speichert jetzt die gleiche Referenz wie s1
// Strings in Java sind unveränderlich.
// Bei Änderungen wird eine neue String erstellt und die Referenz neu zugewiesen.
s1 = "World";
System.out.println(s2); // Gibt "Hello" aus
int[] arr1 = { 1, 2, 3 }; // arr1 speichert eine Referenz auf das Array {1, 2, 3}
int[] arr2 = arr1; // arr2 speichert jetzt die gleiche Referenz
arr2[0] = 10; // Änderung über arr2
System.out.println(arr1[0]); // Gibt 10 aus, die Änderung ist über arr1 sichtbar