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:
= += -=
*= /= %=