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 |
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.
int
típus
A leggyakrabban használt típus a int
tí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,648
fel +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 |
---|---|
|
A length() metódus egy karakterlánc hosszát adja vissza |
|
A length mező tartalmazza a tömb hosszát. |
short
típus
A short
típus a nevét innen kapta short int
. Gyakran rövid egész számnak is nevezik . A int
tí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,768
terjed +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, 10
szí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 int
számít short
.
long
tí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.
byte
típus
Ez a legkisebb egész típus a Java-ban, de messze nem a legkevésbé használt. Neve, byte
a 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 byte
típust leggyakrabban akkor használják, ha nagy blobadatokat kell tárolnia a memóriában. Erre a célra egy s tömb byte
ideá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 byte
tö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.
Minden országnak megvannak a saját szabványai a számok írására (meglepetés!).
one million ones and 153 thousandths
Sokan 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*106
987654321
6
float
tí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*1038
3.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 |
---|---|
|
123.45679 |
|
12346.0 |
|
-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 float
típus nem túl népszerű a Java programozók körében.
double
típus
A double
típus a szabványos lebegőpontos típus. A név a dupla pontosságú lebegőpontos számból származik . double
Alapé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*10308
1.7*10308
Ez lehetővé teszi 15-17 jelentős számjegy tárolását.
Példa:
Kód | Érték |
---|---|
|
1234567890.1234567 |
|
1234567890.1234512 |
|
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 double
típus használatával történik.
11
-323
bitek 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 double
típus könnyen tárolhat több száz nullát tartalmazó számot a tizedesvessző után:
Kód | Érték |
---|---|
|
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 |
---|---|
|
|
|
|
|
|
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 |
---|---|
|
|
|
|
|
|
NaN
Bármilyen hozamú művelet NaN
.
5. char
típus
A Java primitív típusai közül egy külön figyelmet érdemel: a char
tí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 char
típus egyben numerikus típus is ! Ez egy kettős célú típus, hogy úgy mondjam.
A valóság az, hogy a char
tí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 char
változó két bájtot foglal el a memóriában (ugyanaz, mint a short
típus). De a short
típustól eltérően az char
egész típus előjel nélküli, és értékeket tárolhat 0
-tól -ig 65,535
.
A char
tí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:
Különféle módon lehet értéket rendelni egy változóhoz char
.
Kód | Leírás |
---|---|
|
A a változó a latin betűt fogja tartalmazni A . |
|
A a változó a latin betűt fogja tartalmazni A . A kódja a 65 . |
|
A a változó a latin betűt fogja tartalmazni A . Kódja , ami hexadecimális rendszerben 65 egyenlő .41 |
|
A a változó a latin betűt fogja tartalmazni A . Kódja , ami hexadecimális rendszerben 65 egyenlő . A két plusz nulla nem változtat semmit. 41 |
|
A a vá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 char
típus is egész típusú, tehát ilyesmit írhat:
Kód | Konzol kimenet |
---|---|
|
A latin betű B jelenik meg a képernyőn. Mert: A – 65 B – 66 C –67 |
Munkavégzés char
s
Mindegyik char
elő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 |
---|---|
|
|
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. boolean
tí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.
GO TO FULL VERSION