716

Capítulo 17 Estructuras de datos

17.2 Clases de envoltura de tipos para los tipos primitivos

Cada uno de los tipos primitivos (que se enlistan en el apéndice D, Tipos primitivos) tiene su correspondiente 

clase de envoltura de tipo

 (en el paquete 

java.lang

). Estas clases se llaman 

Bolean

Byte

Character

Double

Float

Integer

Long

 y 

Short

. Cada clase de envoltura de tipo nos permite manipular los valores de tipos 

primitivos como objetos. Muchas de las estructuras de datos que desarrollamos o reutilizamos en los capítu-
los 17 a 19 manipulan y comparten objetos 

Object

. Estas clases no pueden manipular variables de tipos primi-

tivos, pero sí pueden manipular objetos de las clases de envoltura de tipos, ya que en última instancia, cada clase 
se deriva de 

Object

.

Cada una de las clases de envoltura de tipos numéricos (

Byte

Short

Integer

Long

Float

 y 

Double

extiende a la clase 

Number

. Además, las clases de envoltura de tipos son 

final

, por lo que no podemos extenderlas.

Los tipos primitivos no tienen métodos, por lo que los métodos relacionados con un tipo primitivo se 

encuentran en la clase de envoltura de tipo correspondiente (por ejemplo, el método 

parseInt

, que convierte 

un objeto 

String

 en un valor 

int

, se encuentra en la clase 

Integer

). Si necesita manipular un valor primitivo 

en su programa, primero consulte la documentación para las clases de envoltura de tipos; el método que necesite 
tal vez ya esté declarado.

17.3 Autoboxing y autounboxing

Antes de Java SE 5, si queríamos insertar un valor primitivo en una estructura de datos que pudiera almacenar 
sólo objetos 

Object

, teníamos que crear un nuevo objeto de la clase de envoltura de tipo correspondiente, y 

después insertar este objeto en la colección. De manera similar, si queríamos obtener un objeto de una clase de 
envoltura de tipo de una colección y manipular su valor primitivo, teníamos que invocar un método en el objeto 
para obtener su correspondiente valor de tipo primitivo. Por ejemplo, suponga que desea agregar un 

int

 a un 

arreglo que almacene sólo referencias a objetos 

Integer

. Antes de Java SE 5, teníamos que “envolver” un valor 

int

 en un objeto 

Integer

 antes de agregar el entero al arreglo y “desenvolver” el valor 

int

 del objeto 

Integer

 

para obtener el valor del arreglo, como en

Integer[] arregloEntero = 

new

 Integer[ 

5

 ]; 

// crea arregloEntero

// asigna Integer 10 a enteroArreglo[ 0 ]

arregloEntero[

0

 ] = 

new

 Integer( 

10

 );

// obtiene valor int de Integer

int

 valor = arregloEntero[ 

0

 ].intValue();

Observe que el valor primitivo 

int

 

10

 se utiliza para inicializar un objeto 

Integer

. Esto logra el resultado desea-

do, pero requiere código adicional y es pesado. Después necesitamos invocar el método 

intValue

 de la clase 

Integer

 para obtener el valor 

int

 en el objeto 

Integer

.

Java SE 5 simplifi có la conversión entre valores de tipos primitivos y los objetos de envoltura de tipos, al no 

requerir código adicional de parte del programador. Java SE 5 introdujo dos nuevas conversiones: la conversión 
boxing y la conversión unboxing. Una 

conversión boxing

 convierte un valor de un tipo primitivo en un objeto 

de la clase de envoltura de tipo correspondiente. Una 

conversión unboxing

 convierte un objeto de una clase de 

envoltura de tipo en un valor del tipo primitivo correspondiente. Estas conversiones se pueden realizar de manera 
automática (a lo cual se le conoce como 

autoboxing

 y 

autounboxing

). Por ejemplo, las instrucciones anteriores 

se pueden reescribir como

 

Integer[] arregloEntero = 

new

 Integer[ 

5

 ]; 

// crea arregloEntero

 arregloEntero[ 

0

 ] = 

10

;

// asigna Integer 10 a arregloEntero[ 0 ]

int

 valor = arregloEntero[ 

0

 ]; 

// obtiene valor int de Integer

En este caso, la conversión autoboxing ocurre cuando se asigna un valor 

int

 (

10

) a

 

arregloEntero[

 

0

 

]

, ya 

que 

arregloEntero

 almacena referencias a objetos 

Integer

, no valores primitivos 

int

. La conversión auto-

unboxing ocurre cuando se asigna 

arregloEntero[

 

0

 

]

 la variable 

int

 

valor

, ya que esta variable almacena un 

valor

 

int

, no una referencia a un objeto 

Integer

. Las conversiones autoboxing y autounboxing también ocurren 

en las instrucciones de control; la condición de una instrucción de control se puede evaluar como un tipo primi-
tivo 

boolean

 o un tipo de referencia 

Boolean

. Muchos de los ejemplos de este capítulo utilizan estas conversiones 

para almacenar valores primitivos en, y para obtenerlos de, las estructuras de datos que sólo almacenan referencias 
a objetos 

Object

.

17_MAQ_CAP_17_DEITEL.indd716

4/19/081:30:01AM