Sobes.tech
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 null opslaan.
  • 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