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.