Apuntes Lenguaje Java

17. Clases envoltorio (Wrapper)

17.1. Definición y uso de clases envoltorio
17.2. Resumen de métodos de Integer.

17.1. Definición y uso de clases envoltorio

En ocasiones es muy conveniente poder tratar los datos primitivos (int, boolean, etc.) como objetos. Por ejemplo, los contenedores definidos por el API en el package java.util (Arrays dinámicos, listas enlazadas, colecciones, conjuntos, etc.) utilizan como unidad de almacenamiento la clase Object. Dado que Object es la raíz de toda la jerarquía de objetos en Java, estos contenedores pueden almacenar cualquier tipo de objetos. Pero los datos primitivos no son objetos, con lo que quedan en principio excluidos de estas posibilidades.

Para resolver esta situación el API de Java incorpora las clases envoltorio (wrapper class), que no son más que dotar a los datos primitivos con un envoltorio que permita tratarlos como objetos. Por ejemplo podríamos definir una clase envoltorio para los enteros, de forma bastante sencilla, con:

public class Entero {
    private int valor;
    
    Entero(int valor) {
        this.valor = valor;
    } 

    int intValue() {
        return valor;
    }
}

 La API de Java hace innecesario esta tarea al proporcionar un conjunto completo de clases envoltorio para todos los tipos primitivos. Adicionalmente a la funcionalidad básica que se muestra en el ejemplo las clases envoltorio proporcionan métodos de utilidad para la manipulación de datos primitivos (conversiones de / hacia datos primitivos, conversiones a String, etc.)

Las clases envoltorio existentes son:

bulletByte para byte.
bulletShort para short.
bulletInteger para int.
bulletLong para long.
bulletBoolean para boolean
bulletFloat para float.
bulletDouble para double y
bulletCharacter para char.

Observese que las clases envoltorio tienen siempre la primera letra en mayúsculas.

Las clases envoltura se usan como cualquier otra:

Integer i = new Integer(5);
int x = i.intValue();

Hay que tener en cuenta que las operaciones aritméticas habituales (suma, resta, multiplicación ...) están definidas solo para los datos primitivos por lo que las clases envoltura no sirven para este fin.

Las variables primitivas tienen mecanismos de reserva y liberación de memoria más eficaces y rápidos que los objetos por lo que deben usarse datos primitivos en lugar de sus correspondientes envolturas siempre que se pueda. 

17.2. Resumen de métodos de Integer

Las clases envoltorio proporcionan también métodos de utilidad para la manipulación de datos primitivos. La siguiente tabla muestra un resumen de los métodos disponibles para la clase Integer

Método Descripción
Integer(int valor)
Integer(String valor)
Constructores a partir de int y String
int intValue() / byte byteValue() /  float floatValue() . . . Devuelve el valor en distintos formatos, int, long, float, etc.
boolean equals(Object obj) Devuelve true si el objeto con el que se compara es un Integer y su valor es el mismo.
static Integer getInteger(String s) Devuelve un Integer a partir de una cadena de caracteres. Estático
static int parseInt(String s) Devuelve un int a partir de un String. Estático.
static String toBinaryString(int i)
static String toOctalString(int i)
static String toHexString(int i)
static String toString(int i)
Convierte un entero a su representación en String en binario, octal, hexadecimal, etc. Estáticos
String toString()  
static Integer valueOf(String s) Devuelve un Integer a partir de un String. Estático.

El API de Java contiene una descripción completa de todas las clases envoltorio en el package java.lang.

Antonio Bel Puchol - antonio@abelp.net