next up previous contents index
Next: Operatoren Up: GrundsymboleOperatoren und Ausdrücke Previous: Auswertungsreihenfolge

Typanpassung

  Typanpassung tritt auf bei Wertzuweisungen, Ausdrücken und Parameterübergaben.

Wir unterscheiden:

Implizite Typanpassung

 

Hier unterscheiden wir die Typanpassung für Grundtypen und die für Referenztypen.

Bei Grundtypen wird implizit zwischen zwei Typen konvertiert, wenn der Bereich des Zieltyps größer oder gleich ist.

Zum Beispiel:

Zwischen char und int
Zwischen long und float
Zwischen float und double

Bei Referenztypen wird implizit konvertiert zwischen einem Typ T und seinen Obertypen.

Explizite Typanpassung

 

Explizite Casts erlauben Typanpassungen, bei denen der Zieltyp den kleineren Wertebereich umfaßt:

   double d = 7.88;
   long l = (long) d;

Explizite Casts also z.B.

Zwischen double und float
Zwischen Fließpunkt und Ganzzahl
Von long nach int, short, byte oder char.

Bei solchen Typanpassungen kann man Genauigkeit verlieren:

   short s = -134;
   byte b = (byte) s;

Die vorderen Bits gehen verloren: b hat den Wert 122.

Für Referenztypen erlauben explizite Casts Typumwandlungen entgegen der Klassenhierarchie, also z.B. vom Obertyp zum Untertyp

Solche Typumwandlungen heißen

Sie erfordern einen Laufzeittest, ob das aktuelle Objekt tatsächlich für den Zieltyp zulässig ist. Wenn nicht: ClassCastException.

class ober{}
class unter extends ober{}
public class classcast
{ public static void main(String argv[])
  { ober objo = new ober();
    unter obju = (unter) objo;
  }
}

liefert Laufzeit-Fehler

    java.lang.ClassCastException: ober

Mögliche Down-Casts:

Diese Down-Casts erfordern Laufzeittests, ob der tatsächliche Wert für den Zieltyp zulässig ist.

String Konvertierung

Es gibt Typanpassungen von jedem Typ (einschließlich Null) nach String.

Verbotene Typanpassungen:


next up previous contents index
Next: Operatoren Up: GrundsymboleOperatoren und Ausdrücke Previous: Auswertungsreihenfolge

Peter Pfahler, 1997