Sobes.tech
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).