2.16.4 | Numerische Konvertierungen |
Wenn eine Variable in einen anderen Typ konvertiert werden soll, so muss ihr einfach der gewünschte Typ in Klammern vorangestellt werden:double x = 678.34; int i = (int)x;Diese Syntax wird auch Cast-Konstrukt genannt. Bei Konvertierungen muss sorgfältig berücksichtigt werden, dass mit der Konvertierung ein Verlust an Genauigkeit sowie eine Einschränkung des Wertebereichs einhergehen kann. Im Allgemeinen können für numerische Konvertierungen die folgenden Regeln angenommen werden:Diese Regeln seien anhand folgender Beispiele demonstriert:
- Bei der Konvertierung eines Gleitpunkttyps in einen Ganzzahltyp werden stets alle Nachkommastellen abgeschnitten (Rundung gegen Null). Falls der Wert der Vorkommastellen zu groß bzw. zu klein ist, um ihn durch den betreffenden Ganzzahltyp darzustellen, resultiert der größte bzw. der kleinste mit dem Ganzzahltyp darstellbare Wert.
- Bei der Konvertierung eines Ganzzahltyps T1 in einen kleineren Ganzzahltyp T2 werden die überzähligen höherwertigen Bits abgeschnitten. Dies kann einen Überlauf mit einem Wechsel des Vorzeichens mit sich bringen.
- Ein Ganzzahltyp kann ohne eine explizite Konvertierung an einen größeren Ganzzahltyp zugewiesen werden. So können alle Ausdrücke vom Typ byte und short an eine Variable vom Typ int zugewiesen werden.
- Der Typ char ist ohne explizite Konvertierung zuweisungskompatibel zu short, int und long.
- Bei einer Konvertierung aus dem Typ double in den Typ float resultiert derjenige float-Wert, der gegenüber dem double-Wert die geringste Differenz aufweist.
- Konvertierungen zwischen einfachen Datentypen lösen grundsätzlich keine Exception aus.
Tabelle 2.13: Numerische Konvertierungen (int)245.3 245 Rundung gegen Null (int)245.9 245 Rundung gegen Null (int)2200000000l -2094967296 Überlauf mit Vorz.-wechsel Die Wrapper-Klassen für numerische Datentypen stellen Methoden zur Verfügung, mit denen ein Wert in jeden anderen numerischen Typ konvertiert werden kann. Im Einzelnen sind dies:
Tabelle 2.14: Konvertierungsmethoden byteValue() doubleValue() floatValue() intValue() longValue() shortValue() Diese Methoden werden nach dem folgenden Muster verwendet:
short s = new Float(123.456f).shortValue();