Java Language
Typumwandlung
Suche…
Syntax
- TargetType target = (SourceType) -Quelle;
Nicht-numerisches primitives Casting
Der boolean
Typ kann nicht in einen anderen primitiven Typ umgewandelt werden.
Ein char
kann in / aus einem beliebigen numerischen Typ umgewandelt werden, indem die in Unicode angegebenen Codepunktezuordnungen verwendet werden. Ein char
wird im Speicher als vorzeichenloser 16-Bit-Integerwert (2 Byte) dargestellt, sodass beim Umsetzen in byte
(1 Byte) 8 dieser Bits gelöscht werden (dies ist für ASCII-Zeichen sicher). Die Utility-Methoden der Character
Klasse verwenden int
(4 Bytes) für die Übertragung zu / von Codepunktwerten, eine short
Angabe (2 Bytes) würde jedoch auch zum Speichern eines Unicode-Codepunkts ausreichen.
int badInt = (int) true; // Compiler error: incompatible types
char char1 = (char) 65; // A
byte byte1 = (byte) 'A'; // 65
short short1 = (short) 'A'; // 65
int int1 = (int) 'A'; // 65
char char2 = (char) 8253; // ‽
byte byte2 = (byte) '‽'; // 61 (truncated code-point into the ASCII range)
short short2 = (short) '‽'; // 8253
int int2 = (int) '‽'; // 8253
Numerisches primitives Casting
Numerische Primitive können auf zwei Arten gegossen werden. Implizite Umwandlung erfolgt, wenn der Quelltyp einen kleineren Bereich als den Zieltyp hat.
//Implicit casting
byte byteVar = 42;
short shortVar = byteVar;
int intVar = shortVar;
long longVar = intvar;
float floatVar = longVar;
double doubleVar = floatVar;
Ein explizites Casting muss durchgeführt werden, wenn der Quelltyp einen größeren Bereich als den Zieltyp hat.
//Explicit casting
double doubleVar = 42.0d;
float floatVar = (float) doubleVar;
long longVar = (long) floatVar;
int intVar = (int) longVar;
short shortVar = (short) intVar;
byte byteVar = (byte) shortVar;
Wenn Sie Gleitkomma-Grundelemente ( float
, double
) in Ganzzahl-Grundelemente konvertieren, wird die Anzahl abgerundet .
Objektguss
Wie bei Grundelementen können Objekte sowohl explizit als auch implizit umgewandelt werden.
Implizites Casting tritt ein, wenn der Quelltyp den Zieltyp erweitert oder implementiert (Casting in eine Superklasse oder Schnittstelle).
Ein explizites Casting muss durchgeführt werden, wenn der Quelltyp durch den Zieltyp erweitert oder implementiert wird (Casting auf einen Subtyp). Dies kann eine Laufzeitausnahme ( ClassCastException
) erzeugen, wenn das umgesetzte Objekt nicht vom ClassCastException
(oder vom Untertyp des Ziels) ist.
Float floatVar = new Float(42.0f);
Number n = floatVar; //Implicit (Float implements Number)
Float floatVar2 = (Float) n; //Explicit
Double doubleVar = (Double) n; //Throws exception (the object is not Double)
Grundlegende numerische Promotion
static void testNumericPromotion() {
char char1 = 1, char2 = 2;
short short1 = 1, short2 = 2;
int int1 = 1, int2 = 2;
float float1 = 1.0f, float2 = 2.0f;
// char1 = char1 + char2; // Error: Cannot convert from int to char;
// short1 = short1 + short2; // Error: Cannot convert from int to short;
int1 = char1 + char2; // char is promoted to int.
int1 = short1 + short2; // short is promoted to int.
int1 = char1 + short2; // both char and short promoted to int.
float1 = short1 + float2; // short is promoted to float.
int1 = int1 + int2; // int is unchanged.
}
Testen, ob ein Objekt mit instanceof umgewandelt werden kann
Java stellt den Operator instanceof
bereit, um zu testen, ob ein Objekt einen bestimmten Typ oder eine Unterklasse dieses Typs aufweist. Das Programm kann dann wählen, ob dieses Objekt entsprechend umgewandelt werden soll oder nicht.
Object obj = Calendar.getInstance();
long time = 0;
if(obj instanceof Calendar)
{
time = ((Calendar)obj).getTime();
}
if(obj instanceof Date)
{
time = ((Date)obj).getTime(); // This line will never be reached, obj is not a Date type.
}