Junior
Šta su referentni tipovi podataka?
sobes.tech АИ
Одговор од АИ
Tipovi podataka sa referencama ne čuvaju samu vrednost, već referencu (adresu u memoriji) na mesto gde se ta vrednost nalazi.
Karakteristike:
- Promenljive referentnog tipa mogu sadržavati
null. - Pri dodeljivanju vrednosti jednoj promenljivoj referentnog tipa drugoj, ne kopira se sama vrednost, već referenca. Obje promenljive počinju da ukazuju na isto mesto u memoriji.
- Promene izvršene putem jedne reference biće vidljive putem druge, ako ukazuju na isti objekat.
- Memorija za objekte referentnih tipova upravlja se od strane garbage collectora.
Primeri referentnih tipova:
- Stringovi (
String) - Nizovi
- Objekti korisničkih klasa
- Delegati (u nekim jezicima)
Razlika u odnosu na vrednosne tipove:
| Karakteristika | Vrednosni tipovi | Tipovi podataka sa referencama |
|---|---|---|
| Skladištenje | Sama vrednost | Referenca na vrednost |
| Kopiranje | Kopira se sama vrednost | Kopira se referenca |
| Izmena | Izmene u kopiji ne utiču na original | Izmene putem jedne reference su vidljive putem druge (ako ukazuju na isti objekat) |
| Memorija | Upravlja se od strane steka (stack) | Upravlja se od strane hrpe, čisti se od strane garbage collectora |
| Primeri | int, float, bool, struct (u nekim jezicima) |
String, Array, Object |
// Primer u C#
string s1 = "Hello"; // s1 ukazuje na string "Hello"
string s2 = s1; // s2 ukazuje na istu referencu kao i s1
// Pri promeni neće biti vidljivo preko druge reference,
// jer su stringovi u C# imutabilni.
// Pri promeni se kreira novi string i referenca se preusmerava.
s1 = "World";
Console.WriteLine(s2); // Ispisuje "Hello"
int[] arr1 = { 1, 2, 3 }; // arr1 ukazuje na niz {1, 2, 3}
int[] arr2 = arr1; // arr2 ukazuje na istu referencu
arr2[0] = 10; // Izmena preko arr2
Console.WriteLine(arr1[0]); // Ispisuje 10, izmena je vidljiva preko arr1
// Primer u Javi
String s1 = "Hello"; // s1 ukazuje na string "Hello"
String s2 = s1; // s2 ukazuje na istu referencu kao i s1
// Stringovi u Javi su imutabilni.
// Pri promeni se kreira novi string i referenca se preusmerava.
s1 = "World";
System.out.println(s2); // Ispisuje "Hello"
int[] arr1 = { 1, 2, 3 }; // arr1 ukazuje na niz {1, 2, 3}
int[] arr2 = arr1; // arr2 ukazuje na istu referencu
arr2[0] = 10; // Izmena preko arr2
System.out.println(arr1[0]); // Ispisuje 10, izmena je vidljiva preko arr1