Поиск…


Синтаксис

  • TargetType target = (SourceType) источник;

Нецифровое примитивное литье

boolean тип не может быть отброшен в / из любого другого примитивного типа.

char может быть преобразован в / из любого числового типа, используя сопоставления кодовых точек, заданные Unicode. char представлен в памяти как неподписанное 16-битовое целочисленное значение (2 байта), поэтому отбрасывание до byte (1 байт) приведет к удалению 8 из этих битов (это безопасно для символов ASCII). Методы утилиты класса Character используют int (4 байта) для передачи в / из значений кодовой точки, но для хранения кодовой точки Unicode также достаточно short (2 байта).

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

Численное примитивное литье

Числовые примитивы можно отличить двумя способами. Неявное литье происходит, когда тип источника имеет меньший диапазон, чем целевой тип.

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

Явное литье должно выполняться, когда тип источника имеет больший диапазон, чем целевой тип.

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

При отливке примитивов с плавающей запятой ( float , double ) и целых чисел число округляется .

Литье объектов

Как и в случае с примитивами, объекты могут быть указаны как явно, так и неявно.

Неявное кастинг происходит, когда тип источника расширяет или реализует целевой тип (отбрасывание на суперкласс или интерфейс).

Явное литье должно выполняться, когда тип источника расширяется или реализуется целевым типом (приведение к подтипу). Это может привести к исключению среды выполнения ( ClassCastException ), когда объект, который выполняется, не относится к типу цели (или подтипу цели).

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)

Основное числовое продвижение

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

Тестирование, если объект может быть запущен с использованием instanceof

Java предоставляет оператору instanceof проверку, является ли объект определенным типом или подклассом этого типа. Затем программа может выбрать, чтобы бросить или не отбросить этот объект соответственно.

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
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow