Sobes.tech
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, за да могат да се използват като обекти.