Advanced 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:
bool int long float double char String
Hier einige Beispiele für Literale.
Datentyp | Werte | ||||
bool | 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 bool 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.
Bis auf String sind alle obigen Datentypen Werttypen. String dagegen ist ein Verweistyp, also eine Klasse.
Verweistypen können nicht einfach in Werttypen umgewandelt werden. Wir haben jedoch mit der Klasse
Convert eine Möglichkeit gefunden Strings in Zahlen vom Typ int oder double zu verwandeln.
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.