primitive Datentypen

<-- zurck zur Startseite | <- eine Seite vor | eine Seite weiter ->

  1. Unterscheidung der Datentypen
  2. Variablen
  3. Konstanten

1. Unterscheidung der Datentypen

Primitive Datentypen sind elementare Datentypen, von denen Java acht Stück kennt. Im Folgenden erfolgt eine Auflistung der Typen, zusammen mit ihrem Bit-Bereich:

DatentypByteBitBeschreibungMinimumwertMaximumwert
boolean18 boolescher Wahrheitswerttrue/false
char216 Unicode-Zeichen, z.B. \u0041065535
byte18 Ganzzahl-128127
short216 Ganzzahl-3276832767
int432 Ganzzahl-2.147.483.6482.147.483.647
long864 Ganzzahl-9.233.372.036.854.775.8089.233.372.036.854.775.807
float432 Fließkommazahl6-7 Stellen
double864 Fließkommazahl15-16 Stellen

Boolesche Werte (true oder false) werden dann verwendet, wenn es nur um wahr oder falsch, ja oder nein geht (v.a. bei bedingten Anweisungen).
char bedeutet "character", also Zeichen. Der Rechner stellt Buchstaben intern als Unicode dar, \u0041 wäre z.B. "A". Ein Character belegt 2 Byte im Speicher. Die Typen byte, short, int und long sind Ganzzahlen.
Da sich ein Byte aus acht Bits zusammensetzt und ein Bit die minimale Einheit (0 oder 1) darstellt, hat ein byte einen Wertebereich von 28 = 8 Bit = 256!
Normalerweise würde der gültige Bereich für ein Byte nun von 0 bis 255 reichen, leider kann man (anders als in C) keine vorzeichenlose Typen verwenden. Das bedeutet, dass der Geltungsbereich sich von -128 bis 127 erstreckt. Das selbe gilt für short, int und long: short hat 2 Byte = 16 Bit = 216 = 65536, der Wertbereich erstreckt sich aber nicht von 0 bis 65535, sondern von -32768 bis 32767. int (Integer-Zahlen) haben 4 Byte = 32 Bit = 232, long-Zahlen haben 8 Byte = 64 Bit = 264.
Auch die Kommazahlen sind vorzeichenbehaftet. Bei ihnen spielt nicht allein die Anzahl der Nachkommastellen eine Rolle, sondern die Anzahl der Stellen der ganzen Zahl.
Achtung: Im Englischen und damit auch in den Programmiersprachen wird ein dezimales Komma durch einen Punkt dargestellt, statt 2,4 muss man also 2.4 schreiben!

Nicht von ungefähr kommt auch die Einteilung von Computern nach 16, 32 oder 64 Bit, oder auch die Angabe der Farbtiefe mit z.B. 16 Bit = 65536 Farben.
Anders als in C kann man jedoch in Java die Wertbereiche nicht selbst bestimmen, es gibt außerdem keine eigenen Typdefinitionen (fehlender Präprozessor) und keine Pointer (Zeiger). In Java gibt es außerdem noch Klassen, um Zahlen darstellen zu können, die beliebig groß sind und selbst den Bereich von "long" oder "double" sprengen würden. Diese Klassen heißen BigInteger für übergroße Ganzzahlen und BigDecimal für beliebig große Fließkommazahlen. Allerdings sind diese Variablen dann keine primitiven Datentypen mehr, sondern Objekte, die auf diesen Klassen gebildet wurden. Deshalb werden wir auf sie später eingehen.
Wenn man eine Ganzzahl haben will, macht man sich in der Regel nur einen Kopf darüber, ob man "int" oder "long" braucht, "byte" und "short" werden i.d.R. vernachlässigt. Als vor einigen Jahren der Speicher noch knapp und teuer war, musste die Programmierer noch mehr Wert auf diese Fragestellung legen. Allerdings gibt es Methoden, denen man einen Datentyp der Marke "byte" bergeben muss.

Eine Besonderheit von Java gegenüber C/C++ ist, dass der Wertbereich aller Datentypen auf jedem System gleich ist (Plattformunabhängigkeit von Java). Ein "short" reicht, egal auf welchem Rechner, von -32768 bis 32767, und muss daher nicht - wie in C/C++ - geprüft werden.
Die Standardausgabe über System.out benutzt bei Daten des Typs "char" nicht die vollen 16 Bit, mit denen sie im Speicher liegen, sondern nur 7 Bit (im positiven Bereich, also Unicodes von 0 bis 128, der sog. ASCII-Zeichensatz): das bedeutet, dass bei der Standardausgabe auf Konsole Sonderzeichen, Umlaute o.ä verstümmelt dargestellt werden, bei einer Ausgabe auf graphischen Oberflächen werden jedoch die vollen 16 Bit (ohne Vorzeichen) benutzt und auch Sonderzeichen werden korrekt dargestellt.

nach oben

2. Variablen

Variablen sind, wie in anderen Programmiersprachen auch, gewissermaßen Platzhalter, deren Inhalt im Programm bearbeitet wird. Da wir nie vorher wissen, was wirklich das Ergebnis ist, müssen wir uns mit Platzhaltern begnügen (so wie das x in der Algebra). Intern verweist der Name, den wir der Variablen geben, auf den zugehörigen Speicherbereich. Zunächst können die Variablen einen der acht vorgestellten primitiven Datentypen annehmen. Dazu wird eine Variable so angelegt:

Typname Variablenname;

Ein Beispiel für eine Integer-Variable namens "anzahl" und eine boolesche Variable namens "besucht":

int anzahl;
boolean besucht;

Um den Variablen nun Werte zuzuweisen, wird das Gleichheitszeichen verwendet (das bedeutet in Java nicht "ist-gleich", sondern eine Zuweisung). Im Beispiel bekommt "anzahl" nun den Wert 1 zugewiesen, "besucht" wird auf "false" gesetzt:

anzahl = 1;
besucht = false;

Nicht vergessen, dass nach Anweisungen immer ein Strichpunkt gesetzt wird.
Natürlich ist es auch möglich, den Variablen sofort bei der Deklaration Werte zuzuweisen:

int anzahl = 1;
boolean besucht = false;

Außerdem ist es erlaubt, mehrere Variablen des selben Typs in einer Zeile zu deklarieren (hier werden i, j, und k deklariert und k sofort auf 0 gesetzt):

int i, j, k=0;

nach oben

3. Konstanten

Da Variablen im Laufe des Programms verändert werden können, wie der Name schon sagt (variabel), wird man den Wunsch versüpren, Konstanten zu definieren, die nicht verändert werden können. Ein Beispiel aus der Mathematik wäre "pi". Das ist nun einmal 3,14 und wird es auch in Zukunft bleiben. Um eine Konstante zu definieren, muss vor der Typangabe das Schlüsselwort "final" gesetzt werden. Per Konvention schreibt man Konstanten komplett Großbuchstaben, um sie leichter identifizieren zu können:

final double PI = 3.14;

Ein kleiner Beispielquelltext:

public class Datentypen {

  public static void main(String[] args) {
    final double PI = 3.14;
    int i, j, k=0;
    boolean besucht;
    besucht = false;
    i = 111;
    j = 30000;
    System.out.println("Der Wert von i ist: " + i);
    System.out.println("Der Wert von j ist: " + j);
    System.out.println("Dieser Text ist etwas lang und es sieht " +
                       "nicht gut aus, wenn man alles in eine Zeile schreibt"); 
  }

}

Wie wir hier sehen, können Strings, auch für die Ausgabe, mit + verkettet werden. Die Zahlen werden dabei automatisch auch in Zeichenketten verwandelt. Für i und für j werden bei der Ausgabe dann die entsprechenden Zahlen, die diesen Variablen zugewiesen wurden, ausgegeben!
Das Plus-Zeichen kann auch verwendet werden, um lange Strings in der nächsten Zeile fortzusetzen, wie in diesem Beispiel.

nach oben