Java Tutorial Teil 3 – Variablen und primitive Datentypen

Nach dem eher unspannenden Beispiel des letzten Artikels wird es nun noch um Datentypen gehen. Die Programme sollen Variablen anlegen, den Variablen Werte zuweisen und diese auf der Konsole ausgeben.

Primitive Datentypen

In Java gibt es acht sogenannte primitive Datentypen. Wenn man in Java eine Variable erstellt, muss man immer angeben, welchem Datentyp sie angehört. So kann man zum Beispiel eine Variable erstellen, in der nur Ganzzahlen gespeichert werden sollen und eine andere für Gleitkommazahlen. Die folgende Tabelle bietet eine Übersicht über die primitiven Datentypen:

Datentyp Wertebereich Größe Beschreibung
boolean true oder false die boolischen Wahrheitswerte (wahr/falsch)
char 0 bis 65.535 16 Bit Unicode-Zeichen mit UTF-16 Kodierung
byte -128 bis 127 8 Bit Ganzzahlen
short -32.768 bis 32.767 16 Bit Ganzzahlen
int -2.147.483.648 bis 2.147.483.647 32 Bit Ganzzahlen
long -9.223.372.036.854.775.808 bis 9.223.372.036.854.775.807 64 Bit Ganzzahlen
float +/-1,4E-45 bis +/-3,4E+38 32 Bit Gleitkommazahlen (IEEE 754)
double +/-4,9E-324 bis +/-1,7E+308 64 Bit Gleitkommazahlen mit doppelter Genauigkeit (IEEE 754)

Boolean

Ein boolean ist entweder true (wahr) oder false (falsch). In späteren Teilen des Tutorials, bei denen es um Schleifen und Bedingungen geht, werden boolean-Variablen eine größere Rolle spielen. Hier ist ein kleines Beispiel dafür, wie man boolean-Variablen deklariert (sie erstellt) und initialisiert (ihnen Werte zuweist).

Wenn du die Datei BooleanBeispiel.java mit javac BooleanBeispiel.java kompilierst und sie dann mit java BooleanBeispiel ausführst, solltest du als Ausgabe in der ersten Zeile true und in der zweiten Zeile false erhalten.

Wie du in Zeile 3 und 4 sehen kannst, wird eine Variable für einen primitiven Datentyp erstellt, indem zuerst der Typ der Variable angegeben wird, gefolgt von dem Namen. Variablennamen müssen mit einem Buchstaben beginnen (normalerweise beginnt man mit einem Kleinbuchstaben), danach dürfen andere Zeichen (auch Ziffern) folgen. Die Variablen im Beispiel heißen variable1 und variable2 und sind vom Typ boolean. Mit dem Gleichheitszeichen = wird ihnen der darauffolgende Wert zugewiesen. Am Ende der Zuweisung muss ein Semikolon ; folgen.

Mit dem Befehl System.out.println(…); wird die Ausgabe erzeugt. Anders als in Teil 2 des Tutorials dürfen hier aber keine Anführungszeichen stehen, da ansonsten der Text variable1 und variable2 ausgegeben werden würde, anstatt der Werte, die in den Variablen gespeichert sind.

Char

Der Datentyp char steht für ein einzelnes Unicode-Zeichen mit der UTF-16-Kodierung. Betrachte dazu das folgende Beispiel:

Das Erstellen von char-Variablen funktioniert ähnlich wie bei boolean-Variablen. Bei der Initialisierung muss darauf geachtet werden, dass das Zeichen mit einfachen Anführungszeichen umschlossen ist. Der Befehl System.out.print(…); ist eine weitere Neuheit hier. Im Gegensatz zu System.out.println(…); wird kein Zeilenumbruch am Ende erzeugt. Sodurch kann erreicht werden, dass die einzelnen Zeichen nacheinander ausgegeben werden, auf der Konsole siehst du nach dem Ausführen Hi! stehen.

Byte, Short, Int und Long

Wie du siehst, gibt es besonders für Ganzzahlen (also Zahlen ohne Komma) eine große Auswahl: byte, short, int und long. Die Unterschiede liegen in den Wertebereichen und im Speicherbedarf (siehe Tabelle oben). In den meisten Fällen wählt man int, damit sind recht große Zahlen darstellbar, der Speicherbedarf aber nicht allzu hoch.

Im obigen Beispiel werden die unterschiedlichen Datentypen deklariert und initialisiert. Bei der Initialisierung gibt es hier einige Besonderheiten, die ich im folgenden durchgehen möchte. Auf der Konsole werden übrigens die Werte -128, 42, 42 und 2147483648 ausgegeben.

Variablenüberläufe

In Zeile 3 wird eine byte-Variable erstellt. Dass die Ausgabe von variable1 -128 lautet, ist ein Phänomen, das man Overflow (Überlauf) nennt. Der Wertebereich des Datentyps byte reicht von -128 bis 127. Wenn man versucht, größere Werte als 127 in eine byte-Variable zu speichern, wird nach der 127 wieder bei -128 angefangen zu zählen. Wäre die Zuweisung also byte variable1 = (byte)129; gewesen, wäre die Ausgabe -127 entstanden. Analog dazu führt byte variable1 = (byte)-129; aufgrund eines Underflows zu der Ausgabe 127.

Typumwandlungen

In Zeile 3 ist dir sicherlich auch das (byte) aufgefallen. Das nennt man eine Typumwandlung (auch casten genannt). Der Befehl byte variable1 = 128; hätte beim Kompilieren einen Fehler erzeugt, denn der Compiler erkennt, dass 128 zu groß für eine byte-Variable ist. Durch den Cast können wir den Compiler aber zwingen, diese Tatsache zu ignorieren und den Wert trotzdem abzuspeichern. Falls die Zahl in ihrer Binärdarstellung mehr Bits benötigt, als der Datentyp zulässt, werden einige Bits abgeschnitten. Die Zahl 256 hat zum Beispiel die Binärschreibweise 100000000, verbraucht also 9 Bits. Es würden also mit byte variable1 = (byte)256; nur die ersten 8 Bits gespeichert werden, was zur Ausgabe 0 führt.

Konvertierungen

Die Zeilen 4 und 5 zeigen, dass eine Variable auch den Wert einer anderen Variable annehmen kann. Das Interessante ist hierbei aber, dass die Variablen eigentlich andere Datentypen unterstützen. Trotzdem gibt es keine Probleme, was daran liegt, dass „kleinere“ Datentypen immer in „größere“ konvertiert werden können. Aus einem byte kann ein short werden, aus einem short ein int und so weiter. Die folgende Grafik zeigt, in welche Richtungen die Konvertierungen immer ohne Informationsverlust möglich sind.

Konvertierungen bei primitiven Datentypen

Konvertierungen bei primitiven Datentypen

Float und Double

Für Gleitkommazahlen gibt es bei Java die primitiven Datentypen float und double.

Das obige Beispiel zeigt die Erstellung von float- und double-Datentypen. Auf der Konsole werden die Zahlen 42.0, 1234.56 und 42.0 ausgegeben. Wie du sehen kannst, ist es auch möglich, eine Variable erst zu deklarieren (Zeile 3) und später zu initialisieren (Zeile 4). In Zeile 5 siehst du, dass kein Komma, sondern ein Punkt verwendet wird (wie in englischsprachigen Raum üblich). Außerdem kann man auch ganze Zahlen wie 42 übergeben (Zeile 4), die Ausgabe ist dann aber trotzdem 42.0. Zuletzt sei noch erwähnt, dass man auch einfach die Datentypen direkt bei System.out.println(…); eingeben kann (Zeile 8).

Weiter zu Teil 4 – Operatoren

Zur Übersicht von allen Teilen des Tutorials

Vielleicht gefällt dir auch...

3 Antworten

  1. 12. März 2015

    […] Variablen und primitive Datentypen: Hier geht es um primitive Datentypen in Java und wie sie verwendet werden können. […]

  2. 31. März 2015

    […] den beim letzten Teil vorgestellten Datentypen kann natürlich auch gerechnet werden. Dazu möchte ich hier die Operatoren […]

  3. 19. April 2015

    […] Weiter zu Teil 3 – Variablen und primitive Datentypen […]

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.