Elméleti alapozás
A literál típusai és alapszintű működésük
Integer és long (egész) literál
Float és double (lebegőpontos) literál
Az előző, A literál fogalma című fejezetben tisztáztuk a fogalmakat, ebben a fejezetben megnézzük a literálok típusait és néhány példakód segítségével leteszteljük működésüket, bár nyilvánvaló hasonlóságot fognak mutatni a Java nyelv egyszerű adattípusaival, amelyek újfent listázva a következők:
A logikai literál 2 értéket vehet fel: igaz (true) vagy hamis (false). Az egyik későbbi, Igazságtáblák című fejezetben ilyen literálokkal modellezzük le az igazságtáblák működését, de az érthetőség kedvéért belőle egy futtatható Java-példakódot ide másolok, a logikai ÉS műveletét:
Java-szintaktikai eleme: A && B.
-
0 AND 0 -> 0
-
1 AND 0 -> 0
-
0 AND 1 -> 0
-
1 AND 1 -> 1
public class Main {
public static void main(String[] args) {
System.out.print("FALSE AND FALSE -> ");
System.out.print(false && false);
System.out.println();
System.out.print("TRUE AND FALSE -> ");
System.out.print(true && false);
System.out.println();
System.out.print("FALSE AND TRUE -> ");
System.out.print(false && true);
System.out.println();
System.out.print("TRUE AND TRUE -> ");
System.out.print(true && true);
}
}
Végeredmény:
FALSE AND FALSE -> false
TRUE AND FALSE -> false
FALSE AND TRUE -> false
TRUE AND TRUE -> true
A karakter literál csakis 1 db karakter lehet az Unikód-táblából, ezért konkrétan (például 'a') vagy Unikód-azonosítójával (a = '\0061') hivatkozhatunk rá.
Megadásakor figyeljünk arra, hogy a szöveggel ellentétben (" ") csakis egyes aposztrófot (' ') használhatunk!
Nézzünk meg egy futtatható Java-példakódot karakter literálokkal:
public class Main {
public static void main(String[] args) {
System.out.print('J');
System.out.print('\u0061');
System.out.print('v');
System.out.print('\u0061');
}
}
Végeredmény:
Java
További megjegyzés, hogy nem mindegyik Unikód-karaktert lehet közvetlenül megjeleníteni, hiszen köztük vannak olyanok, amelyek egyéb funkcióval ellátottak. Néhány ilyen karakterről részletesen írok az Egyéb formázó karakterek című fejezetben.
A szöveg literál voltaképpen karakterekből álló szövegszekvencia.
Megadásakor figyeljünk arra, hogy a karakterrel ellentétben (' ') csakis dupla aposztrófot (" ") használhatunk!
Nézzünk meg egy futtatható Java-példakódot szöveg literállal, amely során felhasználunk egyéb formázó karaktereket is:
public class Main {
public static void main(String[] args) {
System.out.print("Nézzünk meg egy futtatható Java-példakódot szöveg
literállal,\namely során természetesen felhasználhatunk\n\tegyéb formázó
karaktereket is.");
}
}
Végeredmény:
Nézzünk meg egy futtatható Java-példakódot szöveg literállal,
amely során természetesen felhasználhatunk
egyéb formázó karaktereket is.
Integer és long (egész) literál
Az egész literáltípus lehet:
pozitív egész szám, például +1,
negatív egész szám, például -1,
0.
Az alapértelmezett értéktárolási tartománya int nagyságú, tehát...
tárolás 32 biten
számtartománya –2,147,483,648 és +2,147,483,647 között
...de a számliterál mögé illesztett L karakterrel long típussá alakítható, ekkor:
tárolás 64 biten
számtartománya –9,223,372,036,854,775,808 és +9,223,372,036,854,775,807 között.
Nézzünk néhány jellemző, futtatható Java kódot! Bemelegítésképpen kezdjük egyszerű számkiírással:
public class Main {
public static void main(String[] args) {
System.out.println(+1);
}
}
Végeredmény:
+1
public class Main {
public static void main(String[] args) {
System.out.println(-1);
}
}
Végeredmény:
-1
Teszteljük le azt, hogy működnek-e a negatív egész számú literálokon végzett műveletek (a válasz természetesen igen, mert (-1) + (-1) = -2):
public class Main {
public static void main(String[] args) {
int szam = -1 + -1;
System.out.println(szam);
}
}
Végeredmény:
-2
Az egész literálokat nemcsak decimális, hanem hexadecimális és oktális formában is megadhatjuk:
decimális megadás: +1, -1,
hexadecimális megadás: 0x prefixummal történik,
oktális megadás: 0 prefixummal történik (nem tévesztendő össze a decimális 0-val!).
Az alábbi kódokban a decimális 10 értékével kísérletezünk, amelynek:
hexadecimális értéke: a (0xa),
oktális értéke: 12 (012).
Ha pontos a kódmegadásunk, akkor az egyszerű matematikai művelet hexadecimális és oktális literálok beiktatásával is helyes végeredményeket fog szolgáltatni (11):
public class Main {
public static void main(String[] args) {
int szam = 1 + 0xa;
System.out.println(szam);
}
}
Végeredmény:
11
public class Main {
public static void main(String[] args) {
int szam = 1 + 012;
System.out.println(szam);
}
}
Végeredmény:
11
Float és double (lebegőpontos) literál
Lebegőpontos, más néven valós literálok tizedes törttel (meg a többiekkel) leírható nem egész számok. (Bocsánat, ezt a poént, amely egy 1965-ös vígjátékra utal, nem hagyhattam ki...)
Kétféle ábrázolásuk lehetséges:
tizedes törtes alak - 3.14, 0.6666
Ebben az esetben vigyázzunk, hogy ne vesszőt (,),
hanem mindig pontot (.) írjunk a kódba!
IEEE 754/1985, más néven lebegőpontos számformátum - a 10 hatványainak segítségével fejezi ki a számot. Legtöbbször nagyobb értékű literálok tárolásakor érdemes használni:
3 x 102 = 300, mert 3 x (10 x 10) = 300
...amelyben:
3 - mantissza (alap),
2 - exponens (kitevő, a 10 hatványa).
A fenti példánál maradva Java-beli ábrázolása, amint azt a Numerikus lebegőpontos című fejezetben már ismertettük:
3e2 vagy 3E2
public class Main {
public static void main(String[] args) {
int szam = 1 + 3e2;
System.out.println(szam);
}
}
Végeredmény:
301
public class Main {
public static void main(String[] args) {
int szam = 1 + 3E2;
System.out.println(szam);
}
}
Végeredmény:
301
Valós literálok ábrázolása természetesen 0-nál kisebb számok esetében is működik. Alakítsuk át a fenti példát 0-nál kisebbre (3 x 10-2) és nézzük meg Java-béli literális bevitelét:
public class Main {
public static void main(String[] args) {
int szam = 3 * 1e2;
System.out.println(szam);
}
}
Végeredmény:
0.03
A valós literálok alapértelmezett adattárolása double adattípuson történik, de szám után illesztett F betűvel float típussá alakítható.