Java Datentypen

Willemers Informatik-Ecke

Standardtypen

Die Standardtypen in Java sind fast gleich wie in C. Alle sind in ihrer Größe klar definiert. Aus diesem Grund ist auch sizeof() nicht erforderlich.

byte8 Bitfloat32 Bit
short16 Bitdouble64 Bit
int 32 Bitchar16 Bit
long64 Bitboolean8 Bit

boolean

Der neue Typ boolean kann die Werte true und false annehmen. Dieser Typ ist nicht kompatibel mit einem numerischen Typ wie das in C der Fall ist. Eine Zuweisung eines Wertes an eine boolesche Variable scheitert. Auf diese Weise wird der beliebte C-Fehler, in einem booleschen Ausdruck statt dem == eine Zuweisung = zu verwenden, sofort durch den Compiler entdeckt.

char

Der char belegt zwei Byte und kann damit den Unicode Standard verwenden. Für Zeichenketten wird in Java der Typ String und nicht ein char-Feld verwendet.

Fließkommazahlen

double ist mit 8 Byte doppelt so groß wie ein float. Beide entsprechen dem IEEE 754.

Konstanten

Konstanten werden wie Variablen definiert. Durch das Attribut final bleiben sie unveränderbar.

final int MAXFACH = 25;

Felder

Wie bei C beginnt der Index bei 0. Die Definition erfolgt normalerweise in zwei Schritten. Zunächst wird ein Array deklariert. Dabei wird statt der Größe nur leere rechteckige Klammern angegeben. Die so deklarierte Variable ist kein Zeiger, aber ein Referenztyp.

int meinFeld[];

  meinFeld = new int[99];

Das Feld wird erst durch den new-Operator alloziiert. Danach ist die Größe des Feldes nicht mehr änderbar.
Steht von vornherein die Größe fest, kann aber auch beides in einem Schritt erfolgen.

int[] meinFeld = new int[99];

Es ist auch möglich, ein Feld mit Werten vorzubelegen. Auch hier erfolgt Deklaration und Alloziierung in einem Schritt. Die Dimension des Feldes ergibt sich aus der Anzahl der vorgegebenen Werte.

int[] meineFinger = {1,2,3,4,5};

Mehrdimensionale Felder sind analog:

int meinFeld[][][];

  meinFeld = new int[9][4][2];

Alle Felder besitzen eine Instanzvariable namens length, mit der man deren Länge ermitteln kann.

Referenztypen

Objekte und Arrays (genaugenommen auch Strings) sind Referenztypen. Das bedeutet, dass die Variable nicht den Speicher direkt repräsentiert, sondern nur eine Referenz auf die Daten hält. Beim Zugriff auf die Daten ist der Unterschied nicht sichtbar. Aber sobald man eine Referenzvariable kopiert, wird nicht etwa ein Duplikat der Daten angefertigt, sondern eine zweite Referenz auf die gleichen Daten. Will man eine Kopie der Daten, verwendet man clone. Das Gleiche gilt für die Abfrage auf Gleichheit. Wird der == Operator verwendet, wird geprüft, ob beide Variablen auf denselben Datensatz zeigen. Will man also feststellen, ob der gleiche Inhalt in beiden Variablen steht, verwendet man die Methode equals.

Das folgende Listing zeigt dies am Beispiel eines Arrays:

class arrayRef
{
  public static void main (String[] arg)
  {
    int a[] = { 1,2,3,4,5};
    int b[] = a; // b referenziert auf a
    b[2] = 25; // auch a[2] wird veraendert!
    // Zeig das Array:
    for (int i=0; i<5; i++) {
       System.out.print( i );
       System.out.print( " " );
       System.out.print( a[i] );
       System.out.print( " " );
       System.out.println( b[i] );
    }
  }
}

Das Programm wird zeigen, dass b[2] den gleichen Inhalt wie a[2] hat. Verhindert wird dies durch den Aufruf von clone().

    int b[] = a.clone(); // b referenziert auf einer Kopie von a

Sonderfall String

Um Dinge zu vereinfachen, gibt es bei Strings ein paar Sonderfälle. Das beginnt mit den Stringliteralen. Bei der Initialisierung einer String-Variablen mit einem String-Literal muss also nicht new String("literal") verwendet werden, um ein neues Objekt zu erzeugen. Bei der Initialisierung wird automatisch eine Kopie erzeugt.

Operatoren

Numerische Operatoren

+ unär positives Vorzeichen
- unär negatives Vorzeichen
+ binär Summe
- binär Differenz
* binär Produkt
/ binär Quotient
% binär Modulo (Rest)
++ unär Inkrement
-- unär Dekrement

Boolesche Operatoren

Zeichen Bedeutung
== gleich
!= ungleich
< kleiner
<= kleiner oder gleich
> größer
>= größer oder gleich
&& UND mit Shortcut
& UND ohne Shortcut
|| ODER mit Shortcut
| ODER ohne Shortcut
^ exklusiv ODER (XOR): beide Wahrheitswerte unterscheiden sich
! NOT


Homepage - Java (C) Copyright 1999, 2000, 2001 Arnold Willemer