Java Language
Tipo di conversione
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.
}