Sobes.tech
Intern

Jaký je rozdíl mezi primitivními a referenčními datovými typy?

sobes.tech AI

Odpověď od AI

Primární typy přímo ukládají hodnotu, zatímco referenční typy ukládají odkaz (adresu v paměti) na objekt, který hodnotu obsahuje.

Primární typy:

  • Zabírají pevnou a malou paměť.
  • Přenášejí se hodnotou (kopíruje se samotná hodnota).
  • Začínají malým písmenem.
  • Zahrnují: byte, short, int, long, float, double, boolean, char.
// Příklad primárního typu
int a = 10;
int b = a; // Kopíruje hodnotu 10
b = 20;   // Mění se pouze b, a zůstává 10

Referenční typy:

  • Zabírají různou velikost paměti v závislosti na obsahu objektu.
  • Přenášejí se odkazem (kopíruje se adresa objektu). Změny v objektu přes odkaz ovlivňují všechny proměnné, které na něj odkazují.
  • Obvykle začínají velkým písmenem (třídy).
  • Zahrnují: třídy (String, Object, vlastní třídy), rozhraní, pole.
// Příklad referenčního typu
String str1 = new String("Hello");
String str2 = str1; // Kopíruje odkaz na objekt "Hello"
str2 = "World";   // str2 nyní odkazuje na nový objekt "World". str1 stále odkazuje na "Hello".

// Další příklad s měnitelným objektem
ArrayList<Integer> list1 = new ArrayList<>();
list1.add(1);
ArrayList<Integer> list2 = list1; // Kopíruje odkaz na stejný objekt ArrayList
list2.add(2); // Přidává prvek do objektu dostupného přes obě odkazy
// Nyní list1 obsahuje [1, 2] a list2 obsahuje [1, 2]

Rychlá srovnávací tabulka:

Vlastnost Primární typy Referenční typy
Uložení Hodnota Odkaz na objekt
Přenos Podle hodnoty Podle odkazu
Velikost paměti Fixní a malá Proměnlivá
Začíná malým písmenem Ano Obvykle velkým písmenem
Nullability Nemohou být null Mohou být null

Primární typy jsou obalovány odpovídajícími wrapper třídami (například int v Integer), aby s nimi bylo možné pracovat jako s objekty.