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.
}


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow