Intern
Kuo skiriasi pirminiai ir nuorodų duomenų tipai?
sobes.tech AI
Atsakymas iš AI
Primityviosios rūšys tiesiogiai saugo reikšmę, o nuorodinės — nuorodą (atminties adresą) į objektą, kuris turi reikšmę.
Primityviosios rūšys:
- užima fiksuotą ir mažą atminties kiekį.
- perduodamos pagal reikšmę (kopijuojama pati reikšmė).
- prasideda mažąja raide.
- apima:
byte,short,int,long,float,double,boolean,char.
// Pavyzdys su primityviu tipu
int a = 10;
int b = a; // Kopijuojama reikšmė 10
b = 20; // keičiasi tik b, a lieka 10
Nuorodinės rūšys:
- užima skirtingą atminties kiekį, priklausomai nuo objekto turinio.
- perduodamos nuoroda (kopijuojamas objekto adresas). Objekto keitimas per nuorodą veikia visus jį turinčius kintamuosius.
- dažniausiai prasideda didžiąja raide (klasės).
- apima: klases (
String,Object, naudotojų klasės), sąsajos, masyvai.
// Pavyzdys su nuorodiniu tipu
String str1 = new String("Hello");
String str2 = str1; // Kopijuojama nuoroda į "Hello" objektą
str2 = "World"; // str2 dabar nuoroda į naują "World" objektą. str1 vis dar nuoroda į "Hello".
// Kitas pavyzdys su modifikuojamu objektu
ArrayList<Integer> list1 = new ArrayList<>();
list1.add(1);
ArrayList<Integer> list2 = list1; // Kopijuojama nuoroda į tą patį ArrayList objektą
list2.add(2); // Pridedamas elementas į objektą, prieinamą per abi nuorodas
// Dabar list1 turi [1, 2], o list2 taip pat [1, 2]
Trumpa palyginimo lentelė:
| Savybė | Primityviosios rūšys | Nuorodinės rūšys |
|---|---|---|
| Saugojimas | Reikšmė | Nuoroda į objektą |
| Perdavimas | Pagal reikšmę | Pagal nuorodą |
| Atminties dydis | Fiksuotas | Kintamas |
| Prasideda | Mažąja raide | Paprastai didžiąja raide |
| Null galimybė | Negali būti null |
Gali būti null |
Primityviosios rūšys apvyniojamos atitinkamais klasės-apvalkale (wrapper classes), kad būtų galima su jomis dirbti kaip su objektais (pavyzdžiui, int į Integer).