1. Primitív típusok listája

A Java-nak 8 alapvető primitív típusa van. Primitívnek nevezik őket, mivel ezeknek a típusoknak az értékei nem objektumok, és közvetlenül a változókban tárolódnak.

Íme egy táblázat, amely néhány rövid információt tartalmaz ezekről a típusokról:

típus Méret
bájtban
Értéktartomány Alapértelmezett érték Leírás
byte 1 -128 .. 127 0 A legkisebb egész típus egy bájt
short 2 -32.768 .. 32.767 0 Rövid egész szám, két bájt
int 4 -2*10 9 .. 2*10 9 0 Egész szám, 4 bájt
long 8 -9*10 18 .. 9*10 18 0L Hosszú egész szám, 8 bájt
float 4 -10 38 .. 10 38 0.0f Lebegőpontos szám, 4 bájt
double 8 -10 308 .. 10 308 0.0d Dupla pontosságú lebegőpontos szám, 8 bájt
boolean 1 true,false false Logikai típus (csak trueés false)
char 2 0 .. 65.535 '\u0000' Karakterek, 2 bájt, mindegyik nagyobb, mint 0
Alapértelmezett érték

Mellesleg itt van egy fontos árnyalat. Ha deklarál egy példányváltozót (mezőt) vagy egy statikus osztályváltozót, és nem rendel hozzá azonnal értéket, akkor az alapértelmezett értékkel inicializálódik . A táblázat felsorolja ezeket az értékeket.

A metódusban lévő helyi változóknak nincs alapértelmezett értéke. Ha nem rendel értéket az ilyen változókhoz, a rendszer inicializálatlannak tekinti őket, és nem használhatók.

De térjünk vissza a primitív típusokhoz, és nézzük meg őket közelebbről.



2. Egész típusok

A Java-nak 4 egész típusa van: byte, short, intés long. Méretükben és a tárolható értéktartományban különböznek egymástól.

inttípus

A leggyakrabban használt típus a inttípus. A név az int eger (egész szám) szóból származik . Minden egész literál (egész szám) a kódban ints(ha nem végződik L, F, vagy D).

Az ilyen típusú változók értéket vehetnek -2,147,483,648fel +2,147,483,647.

Ez sok, és szinte minden alkalomra elegendő. Szinte minden számot visszaadó függvény egy int.

Példák:

Kód Magyarázat
int n = "String".length();
A length()metódus egy karakterlánc hosszát adja vissza
String[] array = {"Tic", "Tac", "Toe"};
int n = array.length;
A lengthmező tartalmazza a tömb hosszát.

shorttípus

A shorttípus a nevét innen kapta short int. Gyakran rövid egész számnak is nevezik . A inttípustól eltérően a hossza mindössze két bájt, a lehetséges értékek tartománya pedig től -ig -32,768terjed +32,767.

Ez azt jelenti, hogy nem tárolhatod benne az egymilliós számot. Vagy akár 50.000. Ez a Java legritkábban használt egész típusa. Használatának fő motivációja a memória megőrzése.

Tegyük fel, hogy van egy olyan helyzet, amikor előre tudja, hogy olyan értékekkel fog dolgozni, amelyek soha nem haladják meg a 30 000-et, és ezekből az értékekből milliónyi lesz.

Tegyük fel például, hogy egy olyan alkalmazást ír, amely ultranagy felbontású képeket dolgoz fel, 10színenként -biteket használva. És egymillió pixel van a képeden. Ez egy olyan forgatókönyv, ahol a használat melletti döntés intszámít short.

longtípus

Ez a típus a nevét innen kapta , és hosszú egész számnaklong int is nevezik . A típustól eltérően mesésen hatalmas értéktartománya van: -tól -ig .int-9*1018+9*1018

Miért nem az alap egész típus?

Mert a Java a 90-es évek közepén jelent meg, amikor a legtöbb számítógép 32 bites volt. Ez azt jelenti, hogy az összes processzort 32 bites számokkal való munkavégzésre optimalizálták. A processzorok 64 bites egész számokkal tudtak dolgozni, de a műveletek lassabbak voltak velük.

Ennek eredményeként a programozók ésszerűen úgy döntöttek, hogy a szabványos egész típust használják int, és csak akkor használják long, ha valóban szükséges.

bytetípus

Ez a legkisebb egész típus a Java-ban, de messze nem a legkevésbé használt. Neve, bytea Java legkisebb címezhető memóriablokkjára is utal.

Nincs annyi érvényes érték a típushoz byte: tól -128-ig +127. De nem ez az erőssége. A bytetípust leggyakrabban akkor használják, ha nagy blobadatokat kell tárolnia a memóriában. Erre a célra egy s tömb byteideális.

Tegyük fel, hogy másolni kell egy fájlt valahova.

Nem kell feldolgoznia a fájl tartalmát: csak létre kell hoznia egy memóriaterületet (puffert), át kell másolnia a fájl tartalmát, majd átírni az adatokat a pufferből egy másik fájlba. Ehhez egy bytetömb kell.

Ne feledje, hogy egy tömbváltozó csak a memória egy területére vonatkozó hivatkozást tárol. Amikor a változót valamilyen metódusnak adjuk át, csak a memóriacím kerül átadásra. Maga a memóriablokk nem másolódik.

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. Valódi típusok

A primitív típusok két típust tartalmaznak a valós számok számára. Bár nem teljesen pontos ezt a kifejezést használni. Amikor a számítógépek valós számokat kezelnek, lebegőpontos számoknak hívjuk őket . Az elnevezés a számok ábrázolására szolgáló szabványból származik, amelyben a szám egész és tört részeit pont (pont, nem vessző) választja el.

Néhány hasznos információ:

Minden országnak megvannak a saját szabványai a számok írására (meglepetés!).

one million ones and 153 thousandthsSokan megszokták, hogy pontokat használnak az ezrek elválasztására, vesszőt pedig tizedes elválasztóként: például így írnának 1.000.000,153. De az Egyesült Államokban, ahol a Java alkotói éltek, más szabványt fogadtak el:1000000.153

A Java két lebegőpontos primitív típussal rendelkezik: doubleés float.

Mint korábban említettük, ezeknek a típusoknak nagyon sajátos belső elrendezésük van: valójában ezeknek a típusoknak minden változójában nem egy szám található, hanem kettő:

Például a lebegőpontos szám 987654.321ábrázolható . Ekkor a memóriában két számként jelenik meg (a mantissza , azaz a szám jelentős része) és ( kitevő , azaz tíz hatványa)0.987654321*1069876543216

floattípus

A típus neve a lebegőpontos számbólfloat származik . Ennek a típusnak a mérete meglehetősen kicsi - mindössze 4 bájt (32 bit) -, de től -ig tud értékeket tárolni . 24 bit van lefoglalva a mantisszának, és 8 bit a kitevőnek. Ez a típus mindössze 8 jelentős számjegy tárolására képes.-3.4*10383.4*1038

Ez a megközelítés lehetővé teszi, hogy sokkal nagyobb számokat tároljunk, mint egy int, miközben ugyanazt a 4 bájtot használja. Ennek érdekében azonban feláldozzuk a pontosságot. Mivel a memória egy része a mantisszát tárolja, ezek a változók csak 6-7 tizedesjegyet tárolnak, míg a többit eldobjuk.

Példa:

Kód Érték
float a = (float) 123.456789;
123.45679
float a = (float) 12345.9999;
12346.0
float a = (float) -123.456789E-2;
-1.2345679

Amint látja, ennek a típusnak a fő hátránya a nagyon kis számú jelentős számjegy, és a pontosság elvesztése már a nyolcadik számjegynél. Éppen ezért a floattípus nem túl népszerű a Java programozók körében.

doubletípus

A doubletípus a szabványos lebegőpontos típus. A név a dupla pontosságú lebegőpontos számból származik . doubleAlapértelmezés szerint minden valódi literál s.

Ez a típus 8 bájt memóriát (64 bitet) foglal el, és től ig tud értékeket tárolni . Fontos tudnivaló, hogy 53 bit a mantisszához, míg a maradék 11 a kitevőhöz van lefoglalva.-1.7*103081.7*10308

Ez lehetővé teszi 15-17 jelentős számjegy tárolását.

Példa:

Kód Érték
double a = 1234567890.1234567890;
1234567890.1234567
double a = 1234567890.1234512345;
1234567890.1234512
double a = 1234567890.1357913579;
1234567890.1357913

Ez a pontosság, különösen a típushoz képest float, meghatározó: a valós számokkal végzett műveletek 99%-a a doubletípus használatával történik.

11-323bitek vannak lefoglalva a kitevőhöz, ami azt jelenti, hogy tíz -tól -ig hatványokat tárolhat +308(ez kettő -től -ig -1024) +1023. A doubletípus könnyen tárolhat több száz nullát tartalmazó számot a tizedesvessző után:

Kód Érték
double a = 2E-300 * 3E+302
600.0


4. Végtelen

A lebegőpontos számoknak van még egy érdekessége: egy speciális, végtelent jelző értéket tárolhatnak . És képviselheti a pozitív végtelent és a negatív végtelent is .

Példák:

Kód jegyzet
System.out.println( 100.0 / 0.0 );
Infinity
System.out.println( -100.0 / 0.0 );
-Infinity
double a = 1d / 0d;
double b = a * 10;
double c = b - 100;
a == Infinity
b == Infinity
c == Infinity

Ha a végtelent megszorozzuk egy számmal, akkor végtelent kapunk. Ha a végtelenhez hozzáadunk egy számot, akkor végtelent kapunk. Ez szuper kényelmes.

Nem szám ( NaN)

Bármely végtelent érintő művelet végtelent eredményez. Nos, a legtöbb, de nem az összes.

A lebegőpontos számok egy másik speciális értéket is tárolhatnak: NaN. A N ot a N umber (nem szám) rövidítése .

A matematikában, ha a végtelent elosztjuk a végtelennel, az eredmény definiálatlan.

De Java nyelven, ha a végtelent elosztja a végtelennel, az eredmény: NaN.

Példák:

Kód jegyzet
System.out.println(0.0 / 0.0);
NaN
double infinity = 1d / 0d;
System.out.println(infinity / infinity);

NaN
double a = 0.0 / 0.0;
double b = a * 10;
double c = b - 100;
double d = a + infinity;
a == NaN
b == NaN
c == NaN
d == NaN

NaNBármilyen hozamú művelet NaN.



5. chartípus

A Java primitív típusai közül egy külön figyelmet érdemel: a chartípus. Neve a karakter szóból ered , maga a típus pedig karakterek tárolására szolgál.

A karakterekből állnak a húrok, igaz? A karakterláncok karakterek tömbje.

De még érdekesebb, hogy a chartípus egyben numerikus típus is ! Ez egy kettős célú típus, hogy úgy mondjam.

A valóság az, hogy a chartípus valójában nem karakteres. Ehelyett a Unicode kódolásból származó karakterkódokat tárolja . Minden karakter egy számnak felel meg: a karakter numerikus kódjának.

Minden charváltozó két bájtot foglal el a memóriában (ugyanaz, mint a shorttípus). De a shorttípustól eltérően az charegész típus előjel nélküli, és értékeket tárolhat 0-tól -ig 65,535.

A chartípus hibrid típus. Értékei számként (pl. összeadhatók, szorozhatók) és karakterként is értelmezhetők. Ez azért történt, mert bár a karakterek vizuális ábrázolások, a számítógép számára mindenekelőtt csak számok. És sokkal kényelmesebb velük számként dolgozni.

Unicode

Az Unicode egy speciális táblázat (kódolás), amely a világ összes karakterét tartalmazza. És minden karakternek megvan a saját száma. Körülbelül így néz ki:

Primitív típusok a Java nyelven

Különféle módon lehet értéket rendelni egy változóhoz char.

Kód Leírás
char a = 'A';
A aváltozó a latin betűt fogja tartalmazni A.
char a = 65;
A aváltozó a latin betűt fogja tartalmazni A. A kódja a 65.
char a = 0x41;
A aváltozó a latin betűt fogja tartalmazni A.
Kódja , ami hexadecimális rendszerben 65egyenlő .41
char a = 0x0041;
A aváltozó a latin betűt fogja tartalmazni A.
Kódja , ami hexadecimális rendszerben 65egyenlő . A két plusz nulla nem változtat semmit. 41
char a = '\u0041';
A aváltozó a latin betűt fogja tartalmazni A.
Egy másik módszer a karakter kódja alapján történő meghatározására.

Leggyakrabban az emberek egyszerűen idézőjelbe teszik a karaktert (mint a táblázat első sorában). Ez utóbbi módszer is népszerű. Előnye, hogy húrokban is használható.

És ahogy mondtuk, a chartípus is egész típusú, tehát ilyesmit írhat:

Kód Konzol kimenet
char a = 'A';
a++;
System.out.println(a);
A latin betű Bjelenik meg a képernyőn.
Mert:
A65
B66
C67

Munkavégzés chars

Mindegyik charelőször egy szám (karakterkód), majd egy karakter. Ha ismer egy karakterkódot, mindig beszerezheti a karaktert a programjába. Példa:

Kód Konzol kimenet
char c = (char) 1128;
System.out.println(c);

Ѩ

Szabványos kódok

Íme a legismertebb karakterkódok:

Karakterek Kódok
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. booleantípus

És az utolsó primitív típus a boolean.

Mint már tudja, csak két értéket vehet fel: trueés false.

És ezzel már mindent tud, amit erről a típusról tudni lehet.