Konvertierung | Kein Datenverlust. Automatische Konvertierung. |
Möglicher Verlust an Genauigkeit. Automatische Konvertierung. |
Möglicher großer Verlust an Daten. Erfordert eine explizite Typumwandlung. |
---|---|---|---|
byte in short | X | ||
short in byte | X | ||
short in long | X | ||
int in float | X | ||
float in byte | X | ||
double in float | X |
Da, wo es keinen Datenverlust oder nur einen möglichen Verlust an Genauigkeit gibt, wird Java in einem Methodenaufruf den Wert automatisch in den erforderlichen Typ konvertieren. Wenn es einen möglichen Verlust sowohl an Genauigkeit als auch an Größe gibt, verlangt Java von Ihnen eine explizite Angabe, dass Sie die Konvertierung vornehmen möchten, indem Sie eine Typumwandlung vornehmen.
Zum Beispiel:
Point pointA = new Point(); short a = 93, b = 92; int i = 12, j = 13; long x = 0, y = 44; double u = 13.45, v = 99.2; pointA.move( i, j ); // OK — keine Konvertierung notwendig pointA.move( a, b ); // OK — short konvertiert zu int ohne Verlust pointA.move( a, j ); // OK — short konvertiert zu int ohne Verlust pointA.move( x, y ); // NICHT OK — möglicher Verlust an // Genauigkeit und Größe. pointA.move( (int)x, (int)y ); // OK — Typumwandlung sagt fortfahren pointA.move( i, v ); // NICHT OK -- möglicher Verlust an // Genauigkeit und Größe (für v). pointA.move( i, (int)v ); // OK — Typumwandlung sagt fortfahren
Um diese Entscheidungen zu treffen, wird nur der Typ der Variablen (oder des Ausdrucks)
untersucht, NICHT der jeweilige Wert.
Zum Beispiel könnten die jeweiligen Werte (in diesem Fall) in dem ersten mit NICHT OK gekennzeichneten Methodenaufruf von long
zu int
ohne Datenverlust konvertiert werden.
Aber für andere Werte würde es einen völligen Datenverlust geben,
also verlangt der Aufruf eine Typumwandlung.
Beachten Sie auch, dass die Konvertierung auf einer Parameter-für-Parameter Basis durchgeführt wird.
Im dritten Aufruf muss nur der Parameter a
konvertiert werden.