Назад к вопросам
Junior
70
questionbank
Что такое ссылочные типы данных?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Ссылочные типы данных хранят не само значение, а ссылку (адрес в памяти) на место, где это значение находится.
Особенности:
- Переменные ссылочного типа могут хранить ссылку на
null. - При присваивании одной переменной ссылочного типа значения другой, копируется не само значение, а ссылка. Обе переменные начинают указывать на одно и то же место в памяти.
- Изменения, внесенные через одну ссылку, будут видны через другую, если они указывают на один и тот же объект.
- Память для объектов ссылочных типов управляется сборщиком мусора.
Примеры ссылочных типов данных:
- Строки (
String) - Массивы
- Объекты пользовательских классов
- Делегаты (в некоторых языках)
Отличие от значимых типов данных:
| Характеристика | Значимые типы данных | Ссылочные типы данных |
|---|---|---|
| Хранение | Само значение | Ссылка на значение |
| Копирование | Копируется само значение | Копируется ссылка |
| Изменение | Изменения в копии не влияют на оригинал | Изменения через одну ссылку видны через другую (если одна и та же) |
| Память | Управляется стеком (обычно) | Управляется кучей, очищается сборщиком мусора |
| Примеры | int, float, bool, struct (в некоторых языках) |
String, Array, Object |
// Пример на C#
string s1 = "Hello"; // s1 хранит ссылку на строку "Hello"
string s2 = s1; // s2 теперь хранит ту же ссылку, что и s1
// При изменении не будет видно через другую ссылку,
// потому что строки в C# иммутабельны.
// При изменении создается новая строка и ссылка переназначается.
s1 = "World";
Console.WriteLine(s2); // Выводит "Hello"
int[] arr1 = { 1, 2, 3 }; // arr1 хранит ссылку на массив {1, 2, 3}
int[] arr2 = arr1; // arr2 теперь хранит ту же ссылку
arr2[0] = 10; // Изменение через arr2
Console.WriteLine(arr1[0]); // Выводит 10, изменение видно через arr1
// Пример на Java
String s1 = "Hello"; // s1 хранит ссылку на строку "Hello"
String s2 = s1; // s2 теперь хранит ту же ссылку, что и s1
// Строки в Java иммутабельны.
// При изменении создается новая строка и ссылка переназначается.
s1 = "World";
System.out.println(s2); // Выводит "Hello"
int[] arr1 = { 1, 2, 3 }; // arr1 хранит ссылку на массив {1, 2, 3}
int[] arr2 = arr1; // arr2 теперь хранит ту же ссылку
arr2[0] = 10; // Изменение через arr2
System.out.println(arr1[0]); // Выводит 10, изменение видно через arr1