Intern
Каква е разликата между примитивните и референтните типове данни?
sobes.tech AI
Отговор от AI
Първичните типове съхраняват директно стойността, докато референтните типове съхраняват препратка (адрес в паметта) към обекта, който съдържа стойността.
Първични типове:
- Заемат фиксиран и малък обем памет.
- Предават се по стойност (самата стойност се копира).
- Започват с малка буква.
- Включват:
byte,short,int,long,float,double,boolean,char.
// Пример за първичен тип
int a = 10;
int b = a; // Копира стойността 10
b = 20; // Само b се променя, a остава 10
Референтни типове:
- Заемат различен обем памет, в зависимост от съдържанието на обекта.
- Предават се по препратка (копира се адресът на обекта). Промяната на обекта чрез препратката влияе върху всички променливи, които се позовават на него.
- Обикновено започват с голяма буква (класове).
- Включват: класове (
String,Object, потребителски класове), интерфейси, масиви.
// Пример за референтен тип
String str1 = new String("Hello");
String str2 = str1; // Копира се препратката към обекта "Hello"
str2 = "World"; // str2 сега се позовава на нов обект "World". str1 все още се позовава на "Hello".
// Друг пример с променим обект
ArrayList<Integer> list1 = new ArrayList<>();
list1.add(1);
ArrayList<Integer> list2 = list1; // Копира се препратката към същия обект ArrayList
list2.add(2); // Добавя елемент към обекта, достъпен чрез и двете препратки
// Сега list1 съдържа [1, 2], а list2 съдържа [1, 2]
Бърза сравнителна таблица:
| Свойство | Първични типове | Референтни типове |
|---|---|---|
| Съхранение | Стойност | Препратка към обект |
| Прехвърляне | По стойност | По препратка |
| Размер на паметта | Фиксиран и малък | Променлив |
| Започва с малка буква | Да | Обикновено с голяма |
| Nullability | Не могат да бъдат null |
Могат да бъдат null |
Първичните типове се обвиват в съответните класове-обвивки (wrapper classes), например int в Integer, за да могат да се използват като обекти.