Ricerca…


Sintassi

  • TargetType target = (SourceType) source;

Colata primitiva non numerica

Il tipo boolean non può essere lanciato su / da nessun altro tipo primitivo.

È possibile eseguire il cast di un char su / da qualsiasi tipo numerico utilizzando i mapping di punti di codice specificati da Unicode. Un char viene rappresentato in memoria come un valore intero a 16 bit senza segno (2 byte), quindi il casting a byte (1 byte) farà cadere 8 di questi bit (questo è sicuro per i caratteri ASCII). I metodi di utilità della classe Character utilizzano int (4 byte) per il trasferimento da / verso i valori del punto di codice, ma un short (2 byte) sarebbe anche sufficiente per la memorizzazione di un punto di codice Unicode.

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

Colata primitiva numerica

I primitivi numerici possono essere espressi in due modi. Il casting implicito si verifica quando il tipo di origine ha un intervallo più piccolo rispetto al tipo di destinazione.

//Implicit casting
byte byteVar = 42;
short shortVar = byteVar;
int intVar = shortVar;
long longVar = intvar;
float floatVar = longVar;
double doubleVar = floatVar;

Il casting esplicito deve essere eseguito quando il tipo di sorgente ha un intervallo più ampio del tipo di destinazione.

//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;

Quando si esegue il casting di primitive in virgola mobile ( float , double ) su numeri interi primitivi, il numero viene arrotondato per difetto .

Fusione dell'oggetto

Come con i primitivi, gli oggetti possono essere espressi in modo esplicito e implicito.

Il casting implicito si verifica quando il tipo di origine estende o implementa il tipo di destinazione (casting su una superclasse o un'interfaccia).

Il casting esplicito deve essere eseguito quando il tipo di sorgente viene esteso o implementato dal tipo di destinazione (casting in un sottotipo). Questo può produrre un'eccezione di runtime ( ClassCastException ) quando l'oggetto in fase di cast non è del tipo di destinazione (o del sottotipo di destinazione).

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)

Promozione numerica di base

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

Verifica se un oggetto può essere lanciato usando instanceof

Java fornisce l'operatore instanceof per verificare se un oggetto è di un certo tipo o una sottoclasse di quel tipo. Il programma può quindi scegliere di lanciare o non lanciare quell'oggetto di conseguenza.

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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow