Vorlesung Informatik 1 - Teil A: Java Kurs

4.5 Typumwandlung und Operatoren


Die Umwandlung zwischen den Datentypen geschieht entweder implizit oder explizit:

double x = 1;   // implizite Typumwandlung von int nach double

Java handhabt die implizite Typumwandlung sehr restriktiv (starke Typisierung). Sie ist nur erlaubt:

  • bei elementaren Datentypen wenn garantiert kein Genauigkeitsverlust passieren kann:
        byte ---> short ---> int  ---> long •••>   float ---> double
        implizite Umwandlungen von links sind erlaubt, umgekehrt nicht.
        Beispiel erlaubter impliziter Typumwandlung:
               float f = 33;   // von int nach float 
              double d  = 22f;  // von float nach double 
        Nicht erlaubt:
               byte b = 300;  // 300 ist zu groß für byte
               int n=10;
               b = n;  // int passt nicht in byte, auch wenn der aktuelle Wert 10 passen würde
               float x = 33.;  // von double nach float
        
  • bei Referenzdatentypen wenn Zuweisungskompatibilität garantiert ist:
       class Obst{   }
       class Apfel extennds Obst{  }
       Obst a = new Apfel();   // erlaubte implizite Typumwandlung

Explizite Typumwandlung: 

Manchmal möchte man bewusst den Sicherungsmechanismus der starken Typisierung umgehen:

       double x = 18.2;
        int k = (int)x;
       Apfel u = (Apfel)new Obst();

Der Operator (int) wird als Cast bezeichnet. Aber jetzt ist man als Programmiere selbst für die Folgen verantwortlich! So führt die letzte Zeile unweigerlich zur Laufzeit zu einer ClassCastException.

Operatoren:

Neben den offensichtlichen Operatoren  +  -  *  ==   >  <   >= <=   &&   ||  
gibt es in Java noch:
      new
     den Cast: (typ)  , siehe oben
     instanceof: liefert true oder false:

   Beispiel:  Basisklasse sei Obst, Apfel und Birne davon abgeleitet
                  Obst a = new Apfel();
                   if(a instanceof Apfel) ... 
                   
                  a instanceof Apfel --> true
                  a instanceof Obst --> true
                  a instanceof Birne --> false

     

Die Rangfolge der Operatoren von hoher zu niedriger Priorität:

( ) 
++   --   +   -    !     (typ)     .     new 
*    /    %
+    -
<  <=  > >=  instanceof
== !=
&&
||

?    : 

Die folgenden Operatoren haben die geringste Priorität und sie werden von rechts nach links ausgewertet:
=     +=    -=     *=    /=     %=       


Weiterführende Links

ZLehrvideo (YouTube)