Advanced Java Services | Konstanten (Literale) |
Es gab eine Zeit, da sprach man einfach von Konstanten. Heute nennt man sowas Literal und man muß
erklären, was ein Literal ist. Mughal etwa schreibt "a literal denotes a constant value". Also, ein
Literal ist ein konstanter Wert. Und diese Werte haben einen bestimmten Datentyp. Mögliche Datentypen
für Konstanten sind:
boolean int long float double char String
Hier einige Beispiele für Literale.
Datentyp | Werte | ||||
boolean | false | true | |||
int | -17 | 33 | 2147483647 | 077 | 0x77 |
long | 33L | 2147483648 | -17l | 077L | 0x77l |
float | 3.14F | 33f | -7e-1F | -69e-2f | |
double | 3.14 | 33D | -17d | 7e-1 | 69e+2 |
char | 'a' | 'Z' | '_' | '9' | '\u0041' |
String | "aha" | "a" | "1.234" | "1234" | "you got it ?" |
Der Tabelle kann man die Regeln für Literale entnehmen. Für den Datentyp boolean gibt es nur
die zwei Literale true und false. true und false sind auch reservierte Worte.
Eine ganze Zahl ist vom Typ
int, wenn sie im Wertebereich des Datentyps liegt. Außerhalb dieses Bereichs erhält sie vom
Compiler den Typ long (2147483648 hat den Typ long, da 2147483647 die größte Ganzzahl ist,
die mit dem Datentyp int dargestellt werden kann). Ganzzahlen im Bereich int kann man jedoch
durch explizites Anhängen eines großen L oder eines kleinen l (schlecht lesbar!) als Longliteral
kennzeichnen. short- oder byte-Literale gibt es nicht. Eine Fließkommazahl wird vom Compiler
automatisch als double Literal aufgefaßt. float-Literale bekommt man nur durch explizites
Anhängen von groß F oder klein f. Ganzzahlen kann man durch explizites Anhängen von
groß F oder klein f bzw. groß D oder klein d als float- bzw. double-Literale kennzeichnen.
Die wissenschaftliche Schreibweise für Kommazahlen etwa 0.7 = 7*10-1 wird 7e-1
geschrieben, wobei ebenso groß E statt klein e zulässig ist. Eine so dargestellte Zahl wird
immer als double aufgefaßt, auch wenn sie ganzzahlig ist (7e+2 etwa ist also vom Typ double).
Hängt man groß F oder klein f hinten an, dann akzeptiert sie der Compiler als float. Weitere
Möglichkeiten gibt es auf dieser Ebene nicht, ein Anhängsel I existiert nicht und L ist in
dieser Situaution nicht anwendbar. Die Umwandlung eines double-Literals etwa in ein int funktioniert
nur mit dem cast-Operator.
String ist ein nichtprimitiver Datentyp, also eine Klasse. Nichtprimitive Datentypen können nicht
in primitive Datentypen umgewandelt werden. Es gibt jedoch Methoden, die aus dem String "1234" eine
Ganzzahl 1234 vom Typ int machen.
Oktalzahlen und Hexadezimalzahlen
Ein ganzzahliges Literal mit einer führenden 0 wird vom Compiler als Oktalzahl gelesen. So ist
077 eine Oktalzahl und ergibt dezimal 63. Ein Literal der Form 078 führt zu einer Fehlermeldung,
weil im Oktalsystem nur die Ziffern 0 bis 7 verwendet werden dürfen.
Ein ganzzahliges Literal, das mit 0x beginnt wird vom Compiler als Hexadezimalzahl gelesen. So ist 0x77
eine Hexzahl und ergibt dezimal 119, ebenso 0xff (oder 0xFF) mit dem dezimalen Wert 255.
Ein Literal der Form 0xGH führt zu einer Fehlermeldung, weil im Hexadezimalsystem nur die
Ziffern 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f verwendet werden dürfen.