5. diel - Primitívne dátové typy v Jave
V predchádzajúcom cvičení, Riešené úlohy k 3.-4. lekcii Javy, sme si precvičili získané skúsenosti z predchádzajúcich lekcií.
Dnešný Java tutoriál bude veľmi teoretický, pozrieme sa bližšie na dátové typy a vysvetlíme si, kedy aký použiť. Na konci si vytvoríme jednoduchú ukážku.
Dátové typy
Java rozoznáva dva druhy dátových typov, primitívne a referenčné.
Primitívne dátové typy
Premenné primitívneho dátového typu si dokážeme jednoducho predstaviť. Môže sa jednať napr. o číslo alebo znak. V pamäti je jednoducho uložená priamo hodnota a my k tejto hodnote môžeme z programu priamo pristupovať. Slovo priamo som toľkokrát nepoužil len náhodou. V tejto sekcii tutoriálov sa budeme venovať výhradne týmto premenným.
Celočíselné dátové typy
Pozrime sa teraz na tabuľku všetkých vstavaných celočíselných
dátových typov v Jave, všimnite si typ int
, ktorý už poznáme
z minula:
Dátový typ | Rozsah | Veľkosť |
---|---|---|
byte | -128 až 127 | 8 bitov |
short | -32 768 až 32 767 | 16 bitov |
int | -2 147 483 648 až 2 147 483 647 | 32 bitov |
long | -9 223 372 036 854 775 808 až 9 223 372 036 854 775 807 | 64 bitov |
Asi vám napadá otázka, prečo máme toľko možných typov na uloženie
čísla. Odpoveď je jednoduchá, záleží na jeho veľkosti. Čím väčšie
číslo, tým viac spotrebuje pamäte. Pre vek užívateľa teda zvolíme
dátový typ byte
, pretože sa určite nedožije viac ako 127
rokov. Predstavte si databázu milióna užívateľov nejakého systému, keď
zvolíme dátový typ int
namiesto byte
, bude zaberať
4x viac miesta. Naopak, keď budeme mať funkciu na výpočet faktoriálu, len
ťažko nám bude stačiť rozsah dátového typu int
a použijeme
long
.
Nad výberom dátového typu nemusíte veľmi premýšľať, väčšinou sa
používa jednoducho int
. Typ riešte iba v prípade, keď sú
premenné v nejakom poli (všeobecne kolekcii) a je ich teda viac, potom sa
oplatí zaoberať sa pamäťovými nárokmi. Tabuľky sem dávam skôr pre
úplnosť. Medzi typmi samozrejme funguje už spomínaná implicitná konverzia,
teda môžeme priamo priradiť dátový typ int
do premennej typu
long
a podobne bez toho, aby sme niečo konvertovali.
Desatinné čísla
U desatinných čísel je situácia trochu jednoduchšia, máme na výber iba
dva dátové typy. Samozrejme sa líšia opäť v rozsahu hodnoty, ďalej však
ešte v presnosti (vlastne v počte desatinných miest). Dátový typ
double
má už podľa názvu dvojnásobnú presnosť oproti
float
:
Dátový typ | Rozsah | Presnosť |
---|---|---|
float | +-1.5 * 10−45 až +-3.4 * 1038 | 7 čísel |
double | +-5.0 * 10−324 až +-1.7 * 10308 | 15-16 čísel |
Pozor, vzhľadom na to, že desatinné čísla sú v počítači uložené v dvojkovej sústave, dochádza k určitej strate presnosti. Odchýlka je síce takmer zanedbateľná, ale keď budete programovať napr. finančný systém, nepoužívajte tieto dátové typy na uchovanie peňazí, mohlo by dôjsť k malým odchýlkam.
Keď do typu float
chceme dosadiť priamo v zdrojovom kóde,
musíme použiť suffix F
, pri type double
suffix
D
:
float f = 3.14F; double d = 2.72;
U double
ho môžeme vypustiť, pretože je
východiskovým desatinným typom.
Ako desatinný separátor používame v zdrojovom kóde vždy bodku nehľadiac na to, aké máme v operačnom systéme regionálne nastavenia.
Ďalšie vstavané dátové typy
Pozrime sa na ďalšie dátové typy, ktoré nám Java ponúka:
Dátový typ | Rozsah | Veľkosť/Presnosť |
---|---|---|
char | U+0000 až U+ffff | 16 bitov |
boolean | true alebo false |
8 bitov |
Dátový typ char
Typ char
nám reprezentuje jeden znak na rozdiel od typu
String
, ktorý reprezentoval celý reťazec znakov. Znaky v Jave
píšeme do apostrofov:
char character = 'A';
Apostrof napíšeme pomocou klávesy Shift a klávesy, ktorá sa nachádza pod klávesom Backspace:
Typ char
patrí v podstate do celočíselných premenných
(obsahuje číselný kód znaku), ale prišlo mi logickejšie uviesť ho tu.
Dátový typ BigDecimal
Typ BigDecimal
rieši problém ukladania desatinných čísel v
binárnej podobe, ukladá totiž číslo vnútorne ako pole. Používa
sa teda na uchovanie peňažných hodnôt. Nebudeme si tu ukazovať
použitie, pretože sa používa ako objekt. Pokiaľ budete robiť niekedy
finančné výpočty, tak si naň spomeňte.
V Jave sú čísla tzv. oddedené od triedy Number
.
To je skôr informácia do budúcnosti. Keďže teraz nevieme, čo dedičnosť
znamená, dôležitá pre nás nie je. Trieda Number
obsahuje ešte
štyri podtriedy, ktorými sa nebudeme podrobnejšie zaoberať. Triedy
BigDecimal
a BigInteger
slúžia na výpočty s
vysokou presnosťou. Triedy AtomicInteger
a AtomicLong
sa používajú v aplikáciách s viacerými vláknami. Opäť je dôležité,
aby ste vedeli, že niečo také existuje, a prípadne sa sem neskôr
vrátili.
Dátový typ boolean
Typ boolean
nadobúda dve hodnoty: true
(pravda) a
false
(nepravda). Budeme ho používať najmä vtedy, keď sa
dostaneme k podmienkam. Do premennej typu boolean
je možné
uložiť priamo hodnotu true
/ false
a taktiež aj
logický výraz. Skúsme si jednoduchý príklad:
{JAVA_CONSOLE}
boolean sent = false;
boolean expression = (15 > 5);
System.out.println(sent);
System.out.println(expression);
{/JAVA_CONSOLE}
Výstup programu:
Konzolová aplikácia
false
true
Výrazy píšeme do zátvoriek. Vidíme, že výraz nadobúda hodnotu
true
(pravda), pretože hodnota 15
je naozaj väčšia
ako 5
. Od výrazov je to len krok k podmienkam, na ktoré sa
pozrieme neskôr v kurze. To je pre dnešnú lekciu všetko 🙂
V budúcej lekcii, Textové reťazce a referenčné typy v Jave, sa zameriame na referenčné dátové typy, popíšeme si metódy na reťazci a naučíme sa s nimi pracovať.