zur vorherigen Seite   zum Inhaltsverzeichnis   zur nächsten Seite

Antwort:

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

Methodenaufrufe Beispiele

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.

FRAGE 8:

Welche der folgenden Methodenaufrufe sind korrekt?

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, b );
pointA.move( a, x );
pointA.move( u, b );