Sobes.tech
Intern

Kāda ir atšķirība starp primārajiem un atsauces datu tipiem?

sobes.tech AI

Atbilde no AI

Primitīvie tipi tieši glabā vērtību, bet atsauces — saiti (atmiņas adresi) uz objektu, kas satur vērtību.

Primitīvie tipi:

  • aizņem fiksētu un nelielu atmiņas apjomu.
  • tiek nodoti pēc vērtības (kopēta pati vērtība).
  • sākas ar mazo burtu.
  • ietver: byte, short, int, long, float, double, boolean, char.
// Primitīvā tipa piemērs
int a = 10;
int b = a; // Kopē vērtību 10
b = 20;   // mainās tikai b, a paliek 10

Atsauces tipi:

  • aizņem dažādu atmiņas apjomu, atkarībā no objekta satura.
  • tiek nodoti pēc saites (kopēta objekta adrese). Objekta maiņa pēc saites ietekmē visus to atsaucošos mainīgos.
  • parasti sākas ar lielo burtu (klases).
  • ietver: klases (String, Object, lietotāja klases), interfeisi, masīvi.
// Atsauces tipa piemērs
String str1 = jauns String("Hello");
String str2 = str1; // Kopē saiti uz "Hello" objektu
str2 = "World";   // str2 tagad saista jaunu "World" objektu. str1 joprojām saista uz "Hello".

// Cits piemērs ar modifikējamu objektu
ArrayList<Integer> saraksts1 = jauns ArrayList<>();
saraksts1.pievienot(1);
ArrayList<Integer> saraksts2 = saraksts1; // kopē saiti uz to pašu ArrayList objektu
saraksts2.pievienot(2); // pievieno elementu objektam, pieejams caur abām saitēm
// Tagad saraksts1 satur [1, 2], un saraksts2 satur [1, 2]

Īsa salīdzināšanas tabula:

Īpašība Primitīvie tipi Atsauces tipi
Glabāšana Vērtība Saits uz objektu
Pārsūtīšana Pēc vērtības Pēc saites
Atmiņas izmērs Fiksēts Mainīgs
Sākas ar Mazo burtu Parasti ar lielu burtu
Nulles iespēja Nav null Var būt null

Primitīvie tipi tiek ietīti atbilstošajās klases-apvalkos (wrapper classes), lai ar tiem varētu strādāt kā ar objektiem (piemēram, int uz Integer).