Clases Envolventes

El lenguaje Java no considera los tipos de datos primitivos como objetos. Por ejemplo, los datos numéricos, booleanos y de caracteres se tratan de forma primitiva para mantener la eficiencia. A fin de poder manejar los tipos primitivos como objetos, Java proporciona las llamadas clases envoltorio o clases envolventes. Estos elementos quedan envueltos por un objeto que se crea en torno a ellos. Cada tipo primitivo en Java tiene una clase envoltorio asociada en el paquete java.lang. Cada clase envoltorio encapsula un único valor primitivo.

Las clases envolventes implementan objetos inmutables. Esto significa que, una vez inicializado el valor primitivo en su envoltorio, no hay forma de cambiar ese valor. A continuación se muestra una tabla en la cual se recogen las diferentes clases envolventes.

Estas clases proporcionan métodos que permiten manipular el tipo de dato primitivo como si fuese un objeto.

Las conversiones entre los tipos primitivos y sus clases envolventes son automáticas. No es necesario hacer un casting. Para realizarlas se utiliza el Boxing/Unboxing.

  • Boxing: Convertir un tipo primitivo en su clase Wrapper.
  • Unboxing: Convertir un objeto de una clase  Wrapper en su tipo primitivo.

 

Dada la gran cantidad de métodos de estas clases, lo recomendado es hacer uso de la API de Java para estudiar las opciones que tenemos.

Ejemplo Clase Integer:

En la siguiente tabla aparecen algunos métodos de la clase Integer. El resto de clases envolventes correspondientes a tipos primitivos numéricos tienen métodos similares.

Integer(int valor)

Integer(String valor)

Constructor a partir de un int

Integer n = new Integer(20);

Constructor a partir de un String

String s = «123456»;

Integer a = new Integer(s);

int intValue()

float floatValue()

double doubleValue()

…

Devuelve el valor equivalente

Integer n = new Integer(30);

int x = n.intValue();

double y = n.doubleValue();

int parseInt(String s) Método estático que devuelve un int a partir de un String.

String s = «123456»;

int z = Integer.parseInt(s);

 

String toBinaryString(int i)
String toOctalString(int i)
String toHexString(int i)
Métodos estáticos que devuelven un String con la representación binaria, octal o hexadecimal del número.

int numero = 12;

String binario = Integer.toBinaryString(numero);

Integer valueOf(String s) Método Estático. Devuelve un Integer a partir de un String.

Integer m = Integer.valueOf(«123»);

API JAVA: https://docs.oracle.com/javase/10/docs/api/java/lang/Integer.html

 

Ejemplo clase Char:

Provee una serie de métodos para manipular los datos de tipo char. En la siguiente tabla aparecen algunos de estos métodos.

 

Character(char c) Constructor a partir de un char

char car = ‘x’;

Character a = new Character(car);

char charValue() Devuelve el char equivalente

Character n = new Character(‘q’);

char c = n.charValue();

boolean isLowerCase(char ch) boolean isUpperCase(char ch)
boolean isDigit(char ch)boolean isLetter(char ch)
Comprueba si es un carácter en minúsculas.

Comprueba si es un carácter en mayúsculas.

Comprueba si es un dígito (carácter del 0 al 9).

Comprueba si es una letra.

Todos son estáticos.

if(Character.isUpperCase(c)){

…..

}

 

char toLowerCase(char ch)
char toUpperCase(char ch)
Devuelve el char en mayúsculas.

Devuelve el char en minúsculas.

Métodos estáticos.

char car = ‘u’;

System.out.println(Character.toUpperCase(car));

Character valueOf(char c) Método Estático. Devuelve un Character a partir de un char.

Character m = Character.valueOf(‘a’);

API de la clase Character: http://docs.oracle.com/javase/10/docs/api/java/lang/Character.html

 

AUTOBOXING

Si necesita cambiar los tipos de datos primitivos en su objeto equivalente (operación denominada boxing), necesita utilizar las clases envoltorio.

Igualmente, para obtener el tipo de dato primitivo a partir de la referencia del objeto (lo que se denomina unboxing), también necesita usar los métodos de las clases envoltorio. Todas estas operaciones de conversión pueden complicar el código y dificultar su comprensión.

El siguiente ejemplo contiene dos casos sencillos de conversión y recuperación automática de primitivos (autoboxing y autounboxing).

 

El compilador de J2SE  ahora creará el objeto envoltorio automáticamente cuando se asigne un primitivo a una variable del tipo de clase envoltorio. Asimismo, el compilador extraerá el valor primitivo cuando realice la asignación de un objeto envoltorio a una variable de tipos primitivos. Esto puede hacerse al pasar parámetros a métodos o, incluso, dentro de las expresiones aritméticas.