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


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow