Java Language
Skriv konvertering
Sök…
Syntax
- TargetType target = (SourceType) källa;
Icke-numerisk primitiv gjutning
Den boolean
typen kan inte kastas till / från någon annan primitiv typ.
En char
kan kastas till / från vilken numerisk typ som helst med hjälp av kodpunktsavbildningarna som specificeras av Unicode. En char
representeras i minnet som ett osignerat 16-bitars heltal (2 byte), så att casting till byte
(1 byte) kommer att släppa 8 av dessa bitar (detta är säkert för ASCII-tecken). Användningsmetoderna i Character
använder int
(4 byte) för att överföra till / från kodpunktvärden, men en short
(2 byte) skulle också räcka för att lagra en Unicode-kodpunkt.
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
Numerisk primitiv gjutning
Numeriska primitiv kan gjutas på två sätt. Implicit casting händer när källtypen har mindre intervall än måltypen.
//Implicit casting
byte byteVar = 42;
short shortVar = byteVar;
int intVar = shortVar;
long longVar = intvar;
float floatVar = longVar;
double doubleVar = floatVar;
Explicit casting måste göras när källtypen har större intervall än måltypen.
//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;
Vid gjutning av flytande punkt primitiva ( float
, double
) till heltal primitiva, avrundas antalet.
Gjutning av objekt
Liksom med primitiv kan objekt kastas både uttryckligt och implicit.
Implicit casting händer när källtypen utökar eller implementerar måltypen (casting till en superklass eller gränssnitt).
Explicit casting måste göras när källtypen utvidgas eller implementeras av måltypen (casting till en subtyp). Detta kan producera ett runtime-undantag ( ClassCastException
) när objektet som kastas inte är av måltypen (eller målens subtyp).
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)
Grundläggande numerisk marknadsföring
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.
}
Testa om ett objekt kan kastas med instans av
Java tillhandahåller operatören instanceof
att testa om ett objekt är av en viss typ eller en underklass av den typen. Programmet kan sedan välja att kasta eller inte kasta objektet i enlighet därmed.
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.
}