Gráfica comparativa
Bases para la comparación | Boxeo | Unboxing |
---|---|---|
BASIC | Tipo de objeto se refiere al tipo de valor. | proceso de recuperación de valor del objeto en caja. |
Almacenamiento | El valor almacenado en la pila se copia al objeto almacenado en la memoria del montón. | El valor del objeto almacenado en la memoria del montón se copia al tipo de valor almacenado en la pila. |
Conversión | Conversión implícita. | Conversión explícita. |
Ejemplo | int n = 24; objeto ob = n; | int m = (int) ob; |
Definición de boxeo
El boxeo es un procedimiento para convertir un tipo de valor en un tipo de objeto. Aquí, el tipo de valor se almacena en la pila, y el tipo de objeto se almacena en la memoria del montón. Esta conversión de tipo de valor al tipo de objeto es una conversión implícita. Puede asignar directamente un valor a un objeto, y C # manejará la conversión del resto. Vamos a entender el boxeo con un ejemplo.
int i = 24; objeto ob = i; // Boxea el tipo entero n en el tipo de objeto ob. u objeto ob1 = 21; // aquí también un tipo de objeto ob1 se refiere a un tipo entero
En el código anterior, el tipo entero i que contiene el valor 24 se almacena en la pila y se copia al tipo de objeto ob. Un tipo de objeto ahora se refiere a un valor entero. Ahora, el "int i" también contiene el valor 24 y el "tipo de objeto ob" también contienen el valor 24, pero ambos valores son independientes entre sí, es decir, si cambia el valor de i, no reflejará el cambio en la valor de ob.
El boxeo consume memoria extra junto con el tiempo extra. La razón es que un nuevo objeto, que se referirá al tipo de valor, debe asignar el espacio de memoria en el montón. A continuación, el valor del tipo de valor que se almacena en la pila se transferirá a ob el tipo de objeto, en la ubicación de la memoria del montón.
Definición de Unboxing
El reverso del boxeo es Unboxing. Unboxing es una conversión del tipo de objeto al tipo de valor. En Unboxing, el valor del tipo de objeto en caja almacenado en el montón se transfiere al tipo de valor que está almacenado en la pila. A diferencia del boxeo, el Unboxing tiene que hacerse explícitamente. El tipo de objeto se convierte explícitamente al tipo de valor, y el tipo de valor debe ser el mismo que el valor al que se refiere el tipo de objeto. Entendamos el concepto de Unboxing con un ejemplo.
int i = 24; objeto ob = i; // Boxea el tipo entero n en el tipo de objeto ob. int j = (int) ob; // Desmarca el valor entero almacenado en el tipo de objeto ob al tipo entero y.
El valor almacenado en el objeto ob se recupera convirtiéndolo en el mismo tipo al que se refería el objeto, es decir, el tipo entero "j".
Unboxing también consume más memoria y más tiempo. Dado que, cuando un tipo de objeto tiene que ser sin caja, entonces el valor del tipo de objeto almacenado en el montón debe transferirse al nuevo tipo de valor almacenado en la pila. El tipo de objeto cuyo valor que se ha recuperado ahora estará disponible para la recolección de basura.
Las diferencias clave entre el boxeo y Unboxing
- En el boxeo, un objeto se hace para referirse como un tipo de valor. Por otro lado, el proceso de recuperar el valor del objeto en caja se llama unboxing.
- Un tipo de valor almacenado en una pila se copia al objeto almacenado en la memoria del montón. Por otro lado, en unboxing, un objeto almacenado en la memoria del montón se copia en un tipo de valor almacenado en la memoria de la pila.
- El boxeo es una conversión implícita, mientras que, unboxing es una conversión explícita.
Conclusión:
Tanto el boxeo como el unboxing consumen más tiempo y memoria, y son computacionalmente costosos. También carecen de seguridad de tipo y aumenta la sobrecarga de tiempo de ejecución. Siempre se recomienda evitar el uso excesivo del boxeo y el desempaquetado en el programa.