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