Skip to main content

Java 14 (Ukázka, strana 99)

Page 1

98

Kapitola 4 Základní operátory

Poté jsem se pokusil demonstrovat některé vlastnosti konverze mezi hodnotami číselných datových typů. Na řádku 19 jsem proměnné _long přiřadil hodnotu, kterou budeme následně převádět. Hodnotu jsem zadával v hexadecimálním tvaru, aby bylo názorně vidět, jak taková konverze probíhá. V příkazu na řádcích 23–28 jsem pak požádal o tisk jednotlivých konvertovaných hodnot, vždy nejprve v šestnáctkové a pak v desítkové soustavě. Nezlobte se, že vám nyní nevysvětlím, proč jsem se rozhodl tisknout příslušné hodnoty právě takto. Bylo by to na delší povídání, a kromě toho si myslím, že si mnohé dokážete sami odvodit. Příslušný tisk je na řádcích 29–32. První je uvedena výchozí hodnota proměnné _long a na dalších řádcích jsou jednotlivé převedené hodnoty. Všimněte si hodnoty typu int na řádku 30. Hexadecimální zápis je naštěstí uváděn jako kladné číslo, takže je vidět, že v nejvyšším bajtu je hodnota 8, což je nejmenší šestnáctková číslice, která má nejvyšší bit jedničkový. Proto je také dané číslo vnímáno jako záporné, přestože převáděné číslo bylo kladné. Další čísla již mají ve svých nejvyšších bajtech čísla menší než 8 a ta mají nejvyšší bit nulový, takže tato čísla jsou vnímána jako kladná. Na hexadecimálním zápisu čísla je krásně vidět, jak se při převodu na „menší“ typ vždy smaže horní polovina čísla „většího“ typu. Příkaz na řádku 34 se snaží demonstrovat, že převod reálného čísla na celé pouze uřízne desetinnou část. Předpokládám, že hodnotu čísla π znáte, takže dokážete zkontrolovat, zda JShell správně spočetl hodnotu celé části jeho stonásobku. Na řádku 38 pak demonstruji implicitní převod znaku na číslo (= jeho kód) a vzápětí pak na řádku 42 převod čísla na znak s daným kódem.

Přetypování instancí objektových datových typů Pravidla pro přetypovávání objektových datových typů vycházejí z jejich vzájemných vztahů „podtyp × nadtyp“, který jsem již ve stručnosti zmiňoval v pasáži Implicitní přetypování na straně 92 a které budu podrobněji rozebírat až v druhé části. Prozatím tedy pouze princip. Převod spočívá v tom, že se při kontrole přípustnosti přetypování virtuální stroj podívá na skutečný typ přetypovávané hodnoty a na to, jestli cílový datový typ je jejím mateřským typem nebo některým z jeho nadtypů. Je-li tomu tak, přetypování se realizuje, není-li tomu tak, ohlásí se chyba. Ukázky použití operace implicitního i explicitního přetypování najdete ve výpisu 4.7. Na řádku 1 jsem ukazoval, že při explicitním přetypování počítač akceptuje uložení hodnoty proměnné _Object do proměnné _String. Je to ale možné pouze proto, že při posledním přiřazení do proměnné _Object jsme přiřazovali hodnotu typu String (viz příkaz na řádku 29 ve výpisu 4.5 na straně 94). Když jsem pak na řádku 5 zopakoval přiřazení hodnoty proměnné _byte do proměnné _Object (přesněji vytvoření objektu, který uchovával hodnotu dané proměnné), tak zpětný převod daného objektu na jím reprezentovanou hodnotu při explicitním přetypování (viz příkaz na řádku 9) prošel. 62_Java 14 – ZLOM.doc verze 1.03.8618_2021-01-16_so_10-42

Strana 98 z 578 Ukázka elektronické knihy, UID: KOS286730


Turn static files into dynamic content formats.

Create a flipbook