dh-Materialien
Java Tutorial
 

Elementare Datentypen

Typumwandlungen

In Java gibt es acht verschiedene elementare Datentypen (oder auch: primitive Datentypen), die in der folgenden Tabelle aufgelistet sind:

Tabelle Datentypen

Mit den Typnamen byte, short, int und long werden primitive Variablen von ganzzahligem Typ deklariert. Ihre Werte haben eine Länge von 1, 2, 4 bzw. 8 Byte. Ganzzahlige Literale wie -7, 0, oder 13 repräsentieren grundsätzlich Werte vom Typ int. long-Literale unterscheiden sich von int-Literalen durch ein angefügtes „l“ oder „L“: -7L, 0L, 13L.

Die Typnamen float und double kennzeichnen Fließkommavariablen, deren Werte mit einfacher (4 Byte) bzw. mit doppelter (8 Byte) Genauigkeit abgespeichert werden. float-Literale werden mit einem angefügten „f“ oder „F“ gekennzeichnet. Gültige Fließkommaliterale sind zum Beispiel: -0.75F, .6, 4.0, 0F, -3.14E-5. Das letztgenannte Literal repräsentiert die Zahl −3,14·10−5.

Typische Beispiele für char-Literale: 'a', '?', '2', ')'.

Typumwandlungen

Java gestattet implizite Typumwandlungen, und zwar sowohl in erweiternder,

double d = 3.14f;

byte b = 120;
int
i = b;

als auch (teilweise) in einschränkender Form:

int i = 7/3; // i erhält den Wert 2.

Allerdings liefern beispielsweise die Anweisungen

double d = 5.3;
float
f = d;

wenig überraschend den Fehler „Type mismatch cannot convert from double to float“.

Muss für die Abarbeitung einer Programmzeile ein Ausdruck ausgewertet werden, dessen Bestandteile von unterschiedlichem Typ sind, wandelt Java gegebenenfalls implizit den „nicht passenden“ Teil um, sofern es möglich und sinnvoll ist. Hierzu zwei Beispiele:

String txt1 = 3.14f; // fehlerhaft
String txt2 = "" + 3.14f;

txt2 erhält hier den Wert "3.14".

char ch = 'z';
int i = 45 + ch;

Der Variablen i wird hier der Wert 167 zugewiesen, denn gemäß der ASCII-Tabelle, die Buchstaben, Ziffern und andere Zeichen dezimal kodiert, wird das Zeichen z durch den integer-Wert 122 repräsentiert. Das folgende Diagramm zeigt einen Ausschnitt aus der ASCII-Tabelle:

ASCII-Tabelle

Mit einem Typumwandlungsoperator (cast-operator) können explizite Typumwandlungen realisiert werden. Beispiel:

float x = (float) (80*Math.random());

Die Methode Math.random() liefert zunächst eine Zufallszahl zwischen 0 und 1 zurück, und zwar vom Typ double. Vor der Auswertung des Produktterms wird die ganze Zahl 80 implizit in einen Wert vom Typ double umgewandelt, danach wird die Multiplikation beider double-Werte durchgeführt. Das Rechenergebnis vom Typ double wird sodann mittels des Cast-Operators (float) in einen float-Wert umgewandelt und schließlich der Variable x zugewiesen. Wird in einem Programm ein Cast-Operator verwendet, muss bei der Programmierung stets sorgfältig darauf geachtet werden, dass der zur Ergebnisvariablen gehörende Wertebereich während der Laufzeit des Programms keinesfalls überschritten werden kann.

Es folgen Beispiele für die explizite Umwandlung eines integer-Wertes in einen char-Wert bzw. umgekehrt:

char ch = (char) 84;
int i = (int) Character.toLowerCase('T');

Der Variablen ch wird hier das Zeichen 'T' zugewiesen; i erhält den Wert 116. In der zweiten Programmzeile wird die Methode toLowerCase() der statischen Wrapper-Klasse Character aufgerufen. Es handelt sich hierbei um eine überladene Methode, weswegen statt dieser Programmzeile ebenso auch folgende Zeile möglich wäre:

int i = Character.toLowerCase((int) 'T');