Junior
Mi a referencia típusok?
sobes.tech MI
Válasz az MI-től
A hivatkozási típusok nem magát az értéket tárolják, hanem egy hivatkozást (memóriacím) arra a helyre, ahol ez az érték található.
Jellemzők:
- A hivatkozási típusú változók tárolhatnak
nullhivatkozást. - Amikor egy hivatkozási típusú változó értékét egy másiknak adjuk, nem az érték másolódik, hanem a hivatkozás. Mindkét változó ugyanarra a helyre mutat a memóriában.
- Az egyik hivatkozáson keresztül végzett módosítások láthatók a másikon is, ha ugyanarra az objektumra mutatnak.
- A hivatkozási típusú objektumok memóriája a garbage collector által van kezelve.
Példák hivatkozási típusokra:
- Szövegek (
String) - Tömbök
- Egyéni osztályobjektumok
- Delegáltak (bizonyos nyelveken)
Különbség a értéktípusokhoz képest:
| Jellemző | Értéktípusok | Hivatkozási típusok |
|---|---|---|
| Tárolás | Maga az érték | Hivatkozás az értékre |
| Másolás | Az érték másolódik | A hivatkozás másolódik |
| Módosítás | A másolat módosítása nem befolyásolja az eredetit | A módosítások láthatók a másik hivatkozáson keresztül, ha ugyanarra az objektumra mutatnak |
| Memória | Általában a verem (stack) kezeli | A heap, a garbage collector tisztítja |
| Példák | int, float, bool, struct (bizonyos nyelveken) |
String, Array, Object |
// Példa C#-ban
string s1 = "Hello"; // s1 egy "Hello" sztringre mutat
string s2 = s1; // s2 ugyanarra a hivatkozásra mutat
// Módosítás nem látszik a másik hivatkozásnál,
// mert a stringek immutábilisak C#-ban.
// Módosításkor új string jön létre, és a hivatkozás át lesz irányítva.
s1 = "World";
Console.WriteLine(s2); // "Hello"-t ír ki
int[] arr1 = { 1, 2, 3 }; // arr1 egy tömbre mutat
int[] arr2 = arr1; // arr2 ugyanarra a tömbre mutat
arr2[0] = 10; // Módosítás az arr2-n keresztül
Console.WriteLine(arr1[0]); // 10-et ír ki, a módosítás látszik az arr1-ben is
// Példa Java-ban
String s1 = "Hello"; // s1 egy "Hello" sztringre mutat
String s2 = s1; // s2 ugyanarra a hivatkozásra mutat
// A stringek Java-ban immutábilisak.
// Módosításkor új string jön létre, és a hivatkozás át lesz irányítva.
s1 = "World";
System.out.println(s2); // "Hello"-t ír ki
int[] arr1 = { 1, 2, 3 }; // arr1 egy tömbre mutat
int[] arr2 = arr1; // arr2 ugyanarra a tömbre mutat
arr2[0] = 10; // Módosítás az arr2-n keresztül
System.out.println(arr1[0]); // 10-et ír ki, a módosítás látszik az arr1-ben is