1. Lista de tipuri primitive
Java are 8 tipuri primitive de bază. Ele sunt numite primitive deoarece valorile acestor tipuri nu sunt obiecte și sunt stocate direct în variabile.
Iată un tabel cu câteva informații scurte despre aceste tipuri:
| Tip | Dimensiunea în octeți |
Interval de valori | Valoare implicită | Descriere |
|---|---|---|---|---|
byte |
1 | -128 .. 127 | 0 |
Cel mai mic tip întreg este un singur octet |
short |
2 | -32.768 .. 32.767 | 0 |
Număr întreg scurt, doi octeți |
int |
4 | -2*10 9 .. 2*10 9 | 0 |
Număr întreg, 4 octeți |
long |
8 | -9*10 18 .. 9*10 18 | 0L |
Număr întreg lung, 8 octeți |
float |
4 | -10 38 .. 10 38 | 0.0f |
Număr în virgulă mobilă, 4 octeți |
double |
8 | -10 308 .. 10 308 | 0.0d |
Număr cu virgulă mobilă cu precizie dublă, 8 octeți |
boolean |
1 | true,false |
false |
Tip boolean (numai trueși false) |
char |
2 | 0 .. 65.535 | '\u0000' |
Caractere, 2 octeți, toate mai mari decât 0 |
Apropo, iată o nuanță importantă. Dacă declarați o variabilă de instanță (câmp) sau o variabilă de clasă statică și nu îi atribuiți imediat nicio valoare, atunci aceasta este inițializată cu o valoare implicită . Tabelul prezintă o listă a acestor valori.
Variabilele locale dintr-o metodă nu au valoare implicită. Dacă nu atribuiți o valoare unor astfel de variabile, acestea sunt considerate neinițializate și nu pot fi utilizate.
Dar să revenim la tipurile primitive și să le aruncăm o privire mai atentă.
2. Tipuri întregi
Java are 4 tipuri de numere întregi: byte, short, intși long. Ele diferă prin dimensiunea și gama de valori pe care le pot stoca.
inttip
Cel mai des folosit este inttipul. Numele provine de la cuvântul int eger (număr întreg). Toate literalele întregi (numerele întregi) din cod sunt ints(dacă nu se termină cu L, F, sau D).
Variabilele de acest tip pot lua valori de la -2,147,483,648până la +2,147,483,647.
Este mult și este suficient pentru aproape orice ocazie. Aproape fiecare funcție care returnează un număr returnează un int.
Exemple:
| Cod | Explicaţie |
|---|---|
|
Metoda length()returnează lungimea unui șir |
|
Câmpul lengthconține lungimea matricei. |
shorttip
Tipul shortîși ia numele de la short int. Este adesea numit și un număr întreg scurt . Spre deosebire de inttip, lungimea sa este de numai doi octeți și intervalul de valori posibile este de la -32,768până la +32,767.
Asta înseamnă că nu poți stoca numărul un milion în el. Sau chiar 50.000. Acesta este cel mai rar folosit tip întreg în Java. Motivația principală pentru utilizare este conservarea memoriei.
Să presupunem că aveți o situație în care știți dinainte că veți lucra cu valori care nu depășesc niciodată 30.000 și vor exista milioane de aceste valori.
De exemplu, să presupunem că scrieți o aplicație care procesează imagini de definiție ultra-înaltă care utilizează 10-biți pe culoare. Și ai un milion de pixeli în imaginea ta. Acesta este un scenariu în care decizia de a utiliza intsau shortcontează.
longtip
Acest tip își trage numele long intși este numit și un întreg lung . Spre deosebire de inttip, are o gamă de valori fabulos de enormă: de la la .-9*1018+9*1018
De ce nu este tipul întreg de bază?
Pentru că Java a apărut la mijlocul anilor 90, când majoritatea computerelor erau pe 32 de biți. Asta înseamnă că toate procesoarele au fost optimizate pentru a lucra cu numere formate din 32 de biți. Procesoarele puteau funcționa cu numere întregi pe 64 de biți, dar operațiunile cu acestea au fost mai lente.
Ca rezultat, programatorii au decis în mod rezonabil să creeze inttipul întreg standard și să folosească longtipul numai atunci când este cu adevărat necesar.
bytetip
Acesta este cel mai mic tip întreg din Java, dar departe de a fi cel mai puțin utilizat. Numele său, byte, este, de asemenea, cuvântul pentru cel mai mic bloc de memorie adresabil din Java.
Nu există atât de multe valori valide pentru bytetipul: de la -128la +127. Dar asta nu este puterea lui. Tipul byteeste cel mai des folosit atunci când trebuie să stocați în memorie un blob mare. O matrice de bytes este ideală în acest scop.
Să presupunem că trebuie să copiați un fișier undeva.
Nu trebuie să procesați conținutul fișierului: doriți doar să creați o zonă de memorie (buffer), să copiați conținutul fișierului în ea și apoi să scrieți acele date din buffer într-un alt fișier. O bytematrice este ceea ce aveți nevoie pentru asta.
Rețineți că o variabilă matrice stochează doar o referință la o zonă de memorie. Când variabila este transmisă unei metode, este transmisă doar adresa de memorie. Blocul de memorie în sine nu este copiat.
byte[] buffer = new byte[1024*1024];
FileInputStream sourceFile = new FileInputStream("c:\\data.txt");
FileOutputStream destFile = new FileOutputStream("c:\\output.txt");
while (true)
{
int size = sourceFile.read(buffer); // Read data from a file into a buffer
destFile.write(buffer, 0, size); // Write data from the buffer to a file
// Stop copying if the buffer is not full
if (size < buffer.length) break;
}
sourceFile.close();
destFile.close();
3. Tipuri reale
Tipurile primitive includ două tipuri pentru numere reale. Deși nu este complet corect să folosiți acest termen. Când computerele manipulează numere reale, le numim numere în virgulă mobilă . Numele provine dintr-un standard pentru reprezentarea numerelor, în care părțile întregi și fracționale ale unui număr sunt separate printr-o punct (un punct, nu o virgulă).
Fiecare țară are propriile standarde de scriere a numerelor (surpriză!).
Mulți oameni sunt obișnuiți să folosească puncte pentru a separa miile și virgulele ca separator zecimal: de exemplu, ar scrie one million ones and 153 thousandthsca 1.000.000,153. Dar în Statele Unite, unde au trăit creatorii Java, a fost adoptat un alt standard:1000000.153
Java are două tipuri de primitive în virgulă mobilă: doubleși float.
După cum am spus mai devreme, aceste tipuri au un aranjament intern foarte specific: de fapt, în interiorul fiecărei variabile a acestor tipuri nu este un număr, ci două:
De exemplu, numărul în virgulă mobilă 987654.321poate fi reprezentat ca . Apoi în memorie va fi reprezentat ca două numere ( mantisa , adică partea semnificativă a numărului) și ( exponent , adică o putere de zece)0.987654321*1069876543216
floattip
Numele tipului floatprovine de la numărul în virgulă mobilă . Dimensiunea acestui tip este destul de mică - doar 4 octeți (32 de biți) - dar poate stoca valori de la până la . 24 de biți sunt alocați pentru reprezentarea mantisei și 8 biți pentru exponent. Acest tip este capabil să stocheze doar 8 cifre semnificative.-3.4*10383.4*1038
Această abordare face posibilă stocarea unor numere mult mai mari decât un int, folosind aceiași 4 octeți. Dar pentru a face acest lucru, sacrificăm acuratețea. Deoarece o parte din memorie stochează mantisa, aceste variabile stochează doar 6-7 zecimale, în timp ce restul sunt aruncate.
Exemplu:
| Cod | Valoare |
|---|---|
|
123.45679 |
|
12346.0 |
|
-1.2345679 |
După cum puteți vedea, principalul dezavantaj al acestui tip este numărul foarte mic de cifre semnificative și pierderea preciziei de îndată ce a opta cifră. De aceea floattipul nu este foarte popular printre programatorii Java.
doubletip
Tipul doubleeste tipul standard în virgulă mobilă. Numele provine de la numărul în virgulă mobilă cu precizie dublă . Toate literalele reale sunt doubles în mod implicit.
Acest tip ocupă 8 octeți de memorie (64 de biți) și poate stoca valori de la până la . Un lucru important de știut este că 53 de biți sunt alocați pentru mantise, în timp ce restul de 11 sunt pentru exponent.-1.7*103081.7*10308
Acest lucru permite stocarea a 15-17 cifre semnificative.
Exemplu:
| Cod | Valoare |
|---|---|
|
1234567890.1234567 |
|
1234567890.1234512 |
|
1234567890.1357913 |
Această precizie, mai ales în comparație cu floattipul, este decisivă: 99% din toate operațiile cu numere reale sunt efectuate folosind tipul double.
11biții sunt alocați pentru exponent, ceea ce înseamnă că puteți stoca puteri de zece de la -323până la +308(aceasta este o putere de doi de la până -1024la +1023). Tipul doublepoate stoca cu ușurință un număr cu sute de zerouri după virgulă:
| Cod | Valoare |
|---|---|
|
600.0 |
4. Infinitul
Numerele în virgulă mobilă au o altă caracteristică interesantă: pot stoca o valoare specială care denotă infinitul . Și puteți reprezenta infinitul pozitiv și infinitul negativ .
Exemple:
| Cod | Notă |
|---|---|
|
|
|
|
|
|
Dacă infinitul este înmulțit cu un număr, obțineți infinit. Dacă adăugați un număr la infinit, obțineți infinit. E super convenabil.
Nu este un număr ( NaN)
Orice operație care implică infinit produce infinit. Ei bine, majoritatea, dar nu toate.
Numerele în virgulă mobilă pot stoca o altă valoare specială: NaN. Este prescurtarea pentru N o Număr (nu un număr ) .
În matematică, dacă împărțiți infinitul la infinit, rezultatul este nedefinit.
Dar, în Java, dacă împărțiți infinitul la infinit, rezultatul este NaN.
Exemple:
| Cod | Notă |
|---|---|
|
|
|
|
|
|
Orice operațiune cu NaNrandamente NaN.
5. chartip
Printre tipurile primitive ale lui Javachar , unul merită o atenție specială: tipul. Numele său provine de la cuvântul caracter , iar tipul în sine este folosit pentru a stoca caractere .
Caracterele sunt din ce sunt făcute șirurile, nu? Șirurile sunt o matrice de caractere.
Dar și mai interesant este faptul că chartipul este și un tip numeric ! Este un tip cu dublu scop, ca să spunem așa.
Realitatea este că chartipul nu are caractere de fapt. În schimb, stochează coduri de caractere din codificarea Unicode. Fiecare caracter corespunde unui număr: codul numeric al personajului.
Fiecare charvariabilă ocupă doi octeți în memorie (la fel ca shorttipul). Dar, spre deosebire de shorttip, chartipul întreg este nesemnat și poate stoca valori de la 0până la 65,535.
Tipul chareste un tip hibrid. Valorile sale pot fi interpretate atât ca numere (de exemplu, pot fi adăugate și înmulțite) cât și ca caractere. Acest lucru a fost făcut pentru că, deși personajele sunt reprezentări vizuale, pentru un computer ele sunt mai presus de toate doar numere. Și este mult mai convenabil să lucrezi cu ele ca numere.
Unicode
Unicode este un tabel special (codificare) care conține toate caracterele din lume. Și fiecare personaj are propriul său număr. Arata cam asa:

Există diferite moduri de a atribui o valoare unei charvariabile.
| Cod | Descriere |
|---|---|
|
Variabila ava conține litera latină A. |
|
Variabila ava conține litera latină A. Codul său este 65. |
|
Variabila ava conține litera latină A. Codul său este 65, care este egal 41în sistemul hexazecimal. |
|
Variabila ava conține litera latină A. Codul său este 65, care este egal 41în sistemul hexazecimal. Cele două zerouri în plus nu schimbă nimic. |
|
Variabila ava conține litera latină A. O altă modalitate de a defini un caracter prin codul său. |
Cel mai adesea, oamenii indică pur și simplu caracterul între ghilimele (ca în primul rând al tabelului). Acestea fiind spuse, această din urmă metodă este, de asemenea, populară. Avantajul său este că poate fi folosit în șiruri.
Și așa cum am spus, chartipul este, de asemenea, un tip întreg, așa că puteți scrie ceva de genul acesta:
| Cod | Ieșire de consolă |
|---|---|
|
Litera latină Bva fi afișată pe ecran. Pentru că: A– 65B– 66C–67 |
Lucrul cu chars
Fiecare chareste în primul rând un număr (cod caracter), apoi un caracter. Dacă cunoașteți un cod de caracter, puteți oricând să obțineți caracterul în programul dvs. Exemplu:
| Cod | Ieșire de consolă |
|---|---|
|
|
Codurile standard
Iată cele mai cunoscute coduri de caractere:
| Personaje | Codurile |
|---|---|
0, 1, 2, ...9 |
48, 49, 50, ...57 |
a, b, c, ...z |
97, 98, 99, ...122 |
A, B, C, ...Z |
65, 66, 67, ...90 |
6. booleantip
Iar ultimul tip primitiv este boolean.
După cum știți deja, poate lua doar două valori: trueși false.
Și cu asta, știi deja tot ce este de știut despre acest tip.
GO TO FULL VERSION