Junior
Wat zijn referentietypen?
sobes.tech AI
Antwoord van AI
Referentietypen slaan niet de waarde zelf op, maar een verwijzing (adres in geheugen) naar de plek waar deze waarde zich bevindt.
Kenmerken:
- Variabelen van het referentietype kunnen een verwijzing naar
nullopslaan. - Bij het toewijzen van de waarde van een referentietype variabele aan een andere, wordt niet de waarde zelf gekopieerd, maar de verwijzing. Beide variabelen wijzen naar dezelfde plek in het geheugen.
- Wijzigingen aangebracht via één verwijzing zijn zichtbaar via de andere, als ze naar hetzelfde object wijzen.
- Het geheugen voor objecten van referentietypen wordt beheerd door de garbage collector.
Voorbeelden van referentietypen:
- Strings (
String) - Arrays
- Objecten van aangepaste klassen
- Delegaten (in sommige talen)
Verschil met waardetypen:
| Kenmerk | Waardetypen | Referentietypen |
|---|---|---|
| Opslag | De waarde zelf | Een verwijzing naar de waarde |
| Kopiëren | Kopieert de waarde zelf | Kopieert de verwijzing |
| Wijziging | Wijzigingen in de kopie beïnvloeden de originele niet | Wijzigingen via één verwijzing zijn zichtbaar via de andere (als ze naar hetzelfde object wijzen) |
| Geheugen | Beheerd door de stack (meestal) | Beheerd door de heap, wordt opgeruimd door de garbage collector |
| Voorbeelden | int, float, bool, struct (in sommige talen) |
String, Array, Object |
// Voorbeeld in C#
string s1 = "Hello"; // s1 slaat een verwijzing op naar de string "Hello"
string s2 = s1; // s2 slaat nu dezelfde verwijzing op als s1
// Bij wijziging is het niet zichtbaar via de andere verwijzing,
// omdat strings in C# immutable (onveranderlijk) zijn.
// Bij wijziging wordt een nieuwe string gemaakt en de verwijzing opnieuw toegewezen.
s1 = "World";
Console.WriteLine(s2); // Drukt "Hello" af
int[] arr1 = { 1, 2, 3 }; // arr1 slaat een verwijzing op naar de array {1, 2, 3}
int[] arr2 = arr1; // arr2 slaat nu dezelfde verwijzing op
arr2[0] = 10; // Wijziging via arr2
Console.WriteLine(arr1[0]); // Drukt 10 af, de wijziging is zichtbaar via arr1
// Voorbeeld in Java
String s1 = "Hello"; // s1 slaat een verwijzing op naar de string "Hello"
String s2 = s1; // s2 slaat nu dezelfde verwijzing op als s1
// Strings in Java zijn immutable.
// Bij wijziging wordt een nieuwe string gemaakt en de verwijzing opnieuw toegewezen.
s1 = "World";
System.out.println(s2); // Drukt "Hello" af
int[] arr1 = { 1, 2, 3 }; // arr1 slaat een verwijzing op naar de array {1, 2, 3}
int[] arr2 = arr1; // arr2 slaat nu dezelfde verwijzing op
arr2[0] = 10; // Wijziging via arr2
System.out.println(arr1[0]); // Drukt 10 af, de wijziging is zichtbaar via arr1