Naučte se Javu – datové typy

1. května 2002

V tomto díle se seznámíme se základními datovými typy jazyka Java a řekneme si o možnostech typové konverze proměnných.

Jazyk Java je (podobně jako např. C a C++) typový jazyk, tedy každá proměnná má pevně určený datový typ a nemůže v ní být uložena hodnota jiná než odpovídající tomuto datovému typu. Datový typ je obor hodnot, kterých může proměnná nabývat. Tím se typové jazyky liší od většiny skriptovacích jazyků (JavaScript, VB Script, PHP), kde je práce s proměnnými daleko volnější.

Datové typy jsou v Javě dvojího druhu – primitivní a referenční.

Proměnná se deklaruje uvedením názvu typu, za kterým následuje název proměnné, popř. seznam více proměnných oddělený čárkami. Operátor “=” slouží pro přiřazení hodnoty proměnné a může být uveden přímo v deklaraci proměnné.

Příklad:

int x;      // deklarace proměnné x
int y, z;   // deklarace proměnných y, z
int v=5;    // deklarace a přiřazení hodnoty proměnné v

Primitivní datové typy

Primitivní datové typy reprezentují elementární údaje, je jich omezené množství a nedají se uživatelsky definovat.

Přehled primitivních datových typů

typ popis velikost min. hodnota max. hodnota
byte celé číslo 8 bitů -128 +127
short celé číslo 16 bitů -32768 +32767
int celé číslo 32 bitů -2147483648 +2147483647
long celé číslo 64 bitů -9223372036854775808 +9223372036854775807
float reálné číslo 32 bitů -3.40282e+38 +3.40282e+38
double reálné číslo 64 bitů -1.79769e+308 +1.79769e+308
char znak UNICODE 16 bitů /u0000 /uFFFF
boolean logická hodnota 1 bit

Celočíselné typy

Veškeré celočíselné datové typy Javy jsou se znaménkem s výjimkou znakového typu char (lze na něj také pohlížet jako na číslo, pak nabývá pouze kladných hodnot).

Základní celočíselný typ je int. Rozšířený typ je long, menší short a byte.

Konstanta typu long jde explicitně zapsat tak, že za číslo přidáme znak “l” nebo “L”, např. “123456L”.

Pokud číslo začnete číslicí 0, znamená to, že je v osmičkové soustavě. Pokud číslo začnete znaky 0x, je číslo v šestnáctkové soustavě.

int x=123;      // x = 123
int y=0123;     // y = 83
int z=0x12A;    // z = 298

Reálné typy

Pro reálná čísla (s plovoucí desetinou čárkou – floating point) se v Javě používají dva typy – float a přednější double. Konstantu typu float resp. double můžete označit přidáním písmene “f” nebo “F” resp. “d” nebo “D”. U čísel lze specifikovat desítkový exponent pomocí znaku “e” nebo “E”, např. 1.23e5 = 12300.

Reálné typy kromě čísel mohou nabývat speciálních hodnot: POSITIVE_INFINITY (plus nekonečno), NEGATIVE_INFINITY (záporné nekonečno), NaN (hodnota není číslo – Not a Number).

Nejmenší absolutní hodnota (větší než nula) v proměnných typu float a double mohou být:

float 1.40239846e-45
double 4.94065645841246544e-324

Znakové typy

Typ char je dvoubajtový typ pro reprezentaci znaku ve formátu UNICODE. Znaková konstanta se uzavírá do apostrofů (‘a’), popřípadě lze zadat šestnáctkově ve tvaru \u0015. Znak uzavřený do uvozovek reprezentuje jednoznakový řetězec (tedy ne znak).

Znakový řetězec již není primitivní datový typ, reprezentuje se objektem java.lang.String.

Logický typ

Pro logické hodnoty se používá typ boolean, může nabývat hodnot true (pravda) a false (nepravda).

Prázdné typy

Typ void je prázdný typ, nemohou existovat proměnné typu void, ale metody mohou mít návratovou hodnotu void (takové metody žádnou hodnotu nevrací).

Typová konverze

Celočíselné typy lze mezi sebou vzájemně převádět pouze na přesnější hodnoty (tak, aby nemohlo dojít ke ztrátě přesnosti), opačným směrem je nutné použít přetypování pomocí kulatých závorek, jak ukazuje příklad. Totéž platí pro reálné proměnné a pro konverzi mezi celočíselnými a reálnými proměnnými.

Pozn. Operátor “=” se používá pro přiřazení hodnoty.

int i = 5;
short s = 5;
float f= 12.3;
i = s;         // projde
s = i;         // neprojde, mohlo by dojít ke ztrátě přesnosti
s = (short)i;  // projde
f = i;         // projde
i = f;         // neprojde, mohlo by dojít ke ztrátě přesnosti
i = (float)f;  // projde

V Javě není typ boolean reprezentován číslem, jako např. v jazyce C a C++, a nelze je volně zaměňovat, jako např. v PHP. Pokud chcete provést konverzi mezi int a boolean, musíte použít konstrukce:

boolean b = (i!=0);       // 0 na false, zbytek na true
int i = (b==true)?1:0;    // true na 1, false na 0

(o operátorech více v dalším díle)

konstanta datový typ
178 int
8864L long
37.266 double
37.266D double
87.363F float
26.77e3 double
‚c‘ char
true boolean

Referenční datové typy

Referenční datové typy jsou objekty a pole. Hodnota referenční proměnné je odkaz (reference) do paměti na místo, kde je objekt (nebo pole) uložen. V jiných programovacích jazycích se používá pro tento účel pointerů (ukazatelů do paměti), v Javě se přímo s pamětí nepracuje, místo pointerů se používají referenční proměnné.

Typ null je prázdná hodnota pro referenční typy a znamená, že chybí odkaz na objekt resp. pole.

Jelikož referenční proměnná obsahuje pouze odkaz na objekt, nikoli objekt samotný, přiřazením její hodnoty jiné proměnné se přiřadí opět pouze reference na původní objekt, nikoli jeho samotná data tak, jak to bylo u primitivních datových typů. Porovnejte přiřazení v následujícím příkladu (pokud nerozumíte syntaxi v druhé polovině příkladu, nelekejte se, k objektům se dostaneme v dalších dílech).

int x = 1;
int y = x;            // x=1, y=1
y = y+2;              // x=1, y=3
MujObjekt a = new MujObjekt();  // vytvoří se nový objekt
a.x = 1;                        // vytvoří se odkaz na týž objekt
MujObjekt b = a;                // a.x=1, b.x=1
b.x =b.x+2;                     // a.x=3, b.x=3
Štítky: Články

Mohlo by vás také zajímat

Nejnovější

1 komentář

  1. Anonym

    Říj 19, 2014 v 20:13

    V části „Reálné typy“ je chyba – 1.23e5 není 12300 ale 123000.

    V části „Typová konverze“ je chyba – float f= 12.3; se nezkompiluje, protože konvence primitivního typu float je:
    float f= 12.3f;
    nebo
    float f= 12.3F;

    Odpovědět

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *