Tanto la fundición como el boxeo/desempaquetado tienen que ver con tipos y conversión aparente (o real), pero el boxeo/desempaquetado es específico de la relación entre tipos primitivos y sus tipos de envoltura correspondientes, mientras que el casting es explícito o implícito cambio de tipo en el sentido más general.
casting es un término general con dos significados relacionados-pero-diferente:
El tratamiento de un valor de un tipo como si se tratara de un valor de otro tipo. Dos ejemplos de este primer uso son:
1.1. Dado que la clase B
amplía la clase A
, puede solicitar myB
una instancia de B
para tratar como una instancia de A
escribiendo ((A) myB)
donde pueda aparecer una referencia a una instancia de A
. Esto en realidad no produce una nueva instancia de A
.
1.2. Las colecciones anteriores a Java5 almacenaron todo el contenido como Object
; esto generalmente requiere que uses un yeso después de recuperar un objeto de una colección. Por ejemplo, si hubiera almacenado String
en un Map
y necesitara obtener su longitud, escribiría algo como ((String) myMap.get(someKey)).length()
donde se requeriría el elenco para llamar al método length
de String
. De nuevo, esto no provoca que se cree un nuevo String
.
Explicitamente convirtiendo un tipo en otro (es decir, cambiando explícitamente la representación). Un ejemplo de este segundo uso está en la expresión ((int) (float_var + 0.5F))
que redondea una variable de coma flotante agregando 0.5 (que produce un valor de coma flotante) y luego convierte explícitamente ese valor a un número entero. El valor entero resultante (después del molde (int)
) es producido del otro valor por cálculo interno.
fundición puede realizarse cuando hay una superclase/subclase o relación interfaz/implementador (es decir, 1 arriba) o cuando los dos tipos son primitivos tipos numéricos (es decir, 2). Puede buscar "ampliación" y "estrechamiento" para obtener más detalles.
Encajonamiento se refiere a envolver tipos primitivos en objetos contenedores, por lo general solo cuando se debe tener un objeto (por ejemplo, almacenar un valor en una colección).Los tipos primitivos y la envoltura vienen en pares:
int Integer
long Long
boolean Boolean
... ...
Unboxing significa simplemente recuperar el valor primitivo desde dentro de su envoltorio objeto.
A partir de Java5, cuando escribe una expresión que utiliza un valor primitivo donde sería necesario el tipo de envoltura correspondiente (como poner un entero en una colección), el compilador automáticamente desliza el código que realmente envuelve ese valor primitivo . Asimismo, proporcionará el código de desenvolvimiento para usted.
Así que en lugar de escribir (en pre-Java5) algo como:
Map myMap = new HashMap();
...
myMap.put(someKey,Integer.valueOf(3));
...
int nextValue = (myMap.get(someKey)).intValue() + 1;
puede escribir:
Map<KeyType,Integer> myMap = new HashMap<KeyType,Integer>();
...
myMap.put(someKey,3);
...
int nextValue = myMap.get(someKey) + 1;
y el código de boxeo/unboxing se inserta por el compilador.
http://java.sun.com/docs/books/jls/third_edition/html/conversions.html parece útil –