Java Language
Tipo de conversión
Buscar..
Sintaxis
- TargetType target = (SourceType) fuente;
Fundición primitiva no numérica
El tipo boolean
no se puede convertir a / desde ningún otro tipo primitivo.
Se puede convertir un char
a / desde cualquier tipo numérico utilizando las asignaciones de punto de código especificadas por Unicode. Un char
se representa en la memoria como un valor entero de 16 bits sin signo (2 bytes), por lo que la conversión a byte
(1 byte) eliminará 8 de esos bits (esto es seguro para los caracteres ASCII). Los métodos de utilidad de la clase de Character
utilizan int
(4 bytes) para transferir a / desde valores de punto de código, pero un short
(2 bytes) también sería suficiente para almacenar un punto de código 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
Fundición primitiva numérica
Los primitivos numéricos se pueden convertir de dos maneras. La conversión implícita ocurre cuando el tipo de origen tiene un rango más pequeño que el tipo de destino.
//Implicit casting
byte byteVar = 42;
short shortVar = byteVar;
int intVar = shortVar;
long longVar = intvar;
float floatVar = longVar;
double doubleVar = floatVar;
La conversión explícita se debe realizar cuando el tipo de origen tiene un rango mayor que el tipo de destino.
//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;
Cuando se lanzan primitivas de punto flotante ( float
, double
) a primitivas de números enteros, el número se redondea hacia abajo .
Fundición de objetos
Al igual que con los primitivos, los objetos pueden ser lanzados tanto explícita como implícitamente.
La conversión implícita ocurre cuando el tipo de origen extiende o implementa el tipo de destino (conversión a una superclase o interfaz).
La conversión explícita se debe realizar cuando el tipo de origen es extendido o implementado por el tipo de destino (conversión a un subtipo). Esto puede producir una excepción de tiempo de ejecución ( ClassCastException
) cuando el objeto que se está emitiendo no es del tipo de destino (o del subtipo del destino).
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)
Promoción Numérica Básica
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.
}
Probar si un objeto puede ser lanzado usando instanceof
Java proporciona el operador instanceof
para probar si un objeto es de un tipo determinado o una subclase de ese tipo. El programa puede elegir lanzar o no ese objeto en consecuencia.
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.
}