Lekce 6 - Primitivní datové typy v Javě
V předešlém cvičení, Řešené úlohy k 3.-5. lekci Javy, jsme si procvičili nabyté zkušenosti z předchozích lekcí.
Dnešní Java tutoriál bude hodně teoretický, podíváme se více zblízka na datové typy a vysvětlíme si, kdy který použít. Na konci si vytvoříme jednoduchou ukázku.
Datové typy
Java rozeznává dva druhy datových typů: primitivní a referenční.
Primitivní datové typy
Proměnné primitivního datového typu si dokážeme jednoduše představit. Může se jednat např. o číslo nebo znak. V paměti je jednoduše uložena přímo hodnota a my k této hodnotě můžeme z programu přímo přistupovat. Slovo přímo jsme dvakrát nepoužili náhodou. V této sekci tutoriálů se budeme věnovat výhradně těmto proměnným.
Celočíselné datové typy
Podívejme se nyní na tabulku všech vestavěných celočíselných
datových typů v Javě. Všimněme si typu int
, který již známe
z minula:
Datový typ | Rozsah | Velikost |
---|---|---|
byte | –128 až 127 | 8 bitů |
short | –32 768 až 32 767 | 16 bitů |
int | –2 147 483 648 až 2 147 483 647 | 32 bitů |
long | –9 223 372 036 854 775 808 až 9 223 372 036 854 775 807 | 64 bitů |
Asi vás napadá otázka, proč máme tolik možných typů pro uložení
čísla. Odpověď je prostá: záleží na jeho velikosti. Čím větší
číslo je, tím více spotřebuje paměti. Pro věk uživatele tedy zvolíme
datový typ byte
, protože se jistě nedožije více než 127 let.
Představme si databázi milionu uživatelů nějakého systému. Když zvolíme
datový typ int
místo byte
, bude zabírat 4x více
místa. Naopak když budeme mít funkci k výpočtu faktoriálu, stěží nám
bude stačit rozsah datového typu int
a použijeme
long
.
Nad výběrem datového typu nemusíte moc přemýšlet a většinou se
používá jednoduše int
. Typ řešte pouze v případě, když
jsou proměnné v nějakém poli (obecně kolekci) a je jich tedy více. Potom
se vyplatí zabývat se paměťovými nároky. Tabulky uvádíme spíše pro
úplnost. Mezi typy samozřejmě funguje již zmíněná implicitní konverze,
můžeme tedy přímo přiřadit datový typ int
do proměnné typu
long
a podobně, aniž něco konvertujeme.
Desetinná čísla
U desetinných čísel je situace poněkud jednodušší, máme na výběr
pouze dva datové typy. Samozřejmě se liší opět v rozsahu hodnoty, dále
však ještě v přesnosti (vlastně počtu des. míst). Datový typ
double
má již dle názvu dvojnásobnou přesnost oproti
float
:
Datový typ | Rozsah | Přesnost |
---|---|---|
float | +−1.5 * 10−45 až +−3.4 * 1038 | 7 čísel |
double | +−5.0 * 10−324 až +−1.7 * 10308 | 15−16 čísel |
Pozor, vzhledem k tomu, že desetinná čísla jsou v počítači uložena ve dvojkové soustavě, dochází k určité ztrátě přesnosti. Odchylka je sice téměř zanedbatelná, nicméně když budete programovat např. finanční systém, nepoužívejte tyto dat. typy pro uchování peněz, mohlo by dojít k malým odchylkám.
Když do typu float
chceme dosadit hodnotu přímo ve zdrojovém
kódu, musíme použít sufix F
, u typu double
sufix
D
:
float f = 3.14F; double d = 2.72;
U double
můžeme sufix vypustit, jelikož je
výchozím desetinným typem.
Jako desetinný separátor používáme ve zdrojovém kódu vždy tečku, nehledě na to, jaké máme v operačním systému regionální nastavení.
Další vestavěné datové typy
Podívejme se na další datové typy, které nám Java nabízí:
Datový typ | Rozsah | Velikost/Přesnost |
---|---|---|
char | U+0000 až U+ffff | 16 bitů |
boolean | true nebo false |
8 bitů |
Datový typ char
Typ char
nám reprezentuje jeden znak. Tím se liší od typu
String
, který reprezentuje celý řetězec znaků. Znaky v Javě
píšeme do apostrofů.
Apostrof '
píšeme na české klávesnici pomocí
Shift a klávesy vedle Enter (u některých klávesnic je
to klávesa nad Enter, u jiných před ním):

Deklarujme si tedy proměnnou typu char
obsahující nějaký
znak:
char znak = 'A';
Typ char
patří v podstatě do celočíselných proměnných
(obsahuje číselný kód znaku), ale připadalo nám logičtější uvést ho
zde.
Datový typ BigDecimal
Typ BigDecimal
řeší problém ukládání desetinných čísel
v binární podobě, ukládá totiž číslo vnitřně jako pole.
Používá se tedy pro uchování peněžních hodnot. Nebudeme
si zde ukazovat použití, protože se používá jako objekt. Pokud budete
někdy provádět finanční výpočty, tak si na něj vzpomeňte.
V Javě jsou čísla tzv. odděděna od třídy
Number
. To je informace spíše do budoucna. Jelikož nyní
nevíme, co dědičnost znamená, důležitá pro nás není.
Třída Number
obsahuje ještě čtyři podtřídy, kterými se
nebudeme podrobněji zabývat. Třídy BigDecimal
a
BigInteger
slouží k výpočtům s vysokou přesností. Třídy
AtomicInteger
a AtomicLong
se používají v
aplikacích s více podprocesy. Opět je důležité, abyste věděli, že něco
takového existuje, a případně se sem později vrátili.
Datový typ boolean
Typ boolean
nabývá dvou hodnot: true
(pravda) a
false
(nepravda). Budeme ho používat zejména tehdy, až se
dostaneme k podmínkám. Do proměnné typu boolean
lze uložit jak
přímo hodnotu true
/false
, tak i logický výraz.
V následující ukázce použijeme znak >
.
Znaky >
a <
píšeme na české klávesnici
pomocí Pravého ALT a následujících kláves:

Zkusme si tedy jednoduchý příklad:
{JAVA_CONSOLE}
boolean nepravda = false;
boolean vyraz = (15 > 5);
System.out.println(nepravda);
System.out.println(vyraz);
{/JAVA_CONSOLE}
Výstup programu:
Konzolová aplikace
false
true
Výrazy píšeme do závorek. Vidíme, že výraz nabývá hodnoty
true
(pravda), protože hodnota 15
je opravdu větší
než 5
. Od výrazů je to již jen krok k podmínkám, na ně se
podíváme později v kurzu. To je pro dnešní lekci vše 🙂
V příští lekci, Textové řetězce a referenční typy v Javě, se zaměříme na referenční datové typy, popíšeme si metody na řetězci a naučíme se s nimi pracovat.