Szukaj…


Składnia

  • TargetType target = (SourceType) źródło;

Prymitywne odlewanie nienumeryczne

Typ boolean nie może być rzutowany na / z żadnego innego typu pierwotnego.

char może być oddane do / z każdego rodzaju numerycznego przy użyciu mapowania kodu punkcie określonym przez Unicode. char jest przedstawiony w pamięci bez znaku 16-bitowej wartości całkowitej (2 bajtów), więc odlewanie do byte (jeden bajt) spadnie 8 tych bitów (jest to bezpieczne dla znaków ASCII). Metody narzędziowe klasy Character używają int (4 bajty) do przesyłania do / z wartości w punktach kodowych, ale wystarczą również short (2 bajty) do przechowywania punktu kodowego 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

Numeryczne prymitywne odlewanie

Prymitywy liczbowe można rzutować na dwa sposoby. Rzutowanie niejawne ma miejsce, gdy typ źródła ma mniejszy zasięg niż typ docelowy.

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

Jawne rzutowanie należy wykonać, gdy typ źródłowy ma większy zasięg niż typ docelowy.

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

Podczas rzutowania prymitywów float (liczba float , double ) na operacje na liczbach całkowitych liczba jest zaokrąglana w dół .

Rzucanie obiektów

Podobnie jak w przypadku prymitywów, obiekty można rzutować zarówno jawnie, jak i niejawnie.

Rzutowanie niejawne ma miejsce, gdy typ źródłowy rozszerza lub implementuje typ docelowy (rzutowanie na nadklasę lub interfejs).

Jawne rzutowanie należy wykonać, gdy typ źródłowy zostanie rozszerzony lub zaimplementowany przez typ docelowy (rzutowanie na podtyp). Może to powodować wyjątek środowiska wykonawczego ( ClassCastException ), gdy rzutowany obiekt nie jest typu docelowego (lub podtypu celu).

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)

Podstawowa promocja numeryczna

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

Testowanie, czy obiekt można rzutować za pomocą instanceof

Java udostępnia operator instanceof do testowania, czy obiekt jest określonego typu lub podklasy tego typu. Program może następnie odpowiednio rzutować lub nie rzutować tego obiektu.

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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow