Saltar a contenido

Anexo Wrappers

Wrappers (Envoltorios)

Los wrappers permiten "envolver" datos primitivos en objetos, también se llaman clases contenedoras. La diferencia entre un tipo primitivo y un wrapper es que este último es una clase y por tanto, cuando trabajamos con wrappers estamos trabajando con objetos.

Recuerda

Como son objetos debemos tener cuidado en el paso como parámetro en métodos ya que en el wrapper se realiza por referencia.

Una de las principales ventajas del uso de wrappers son la facilidad de conversión entre tipos primitivos y cadenas.

Hay una clase contenedora por cada uno de los tipos primitivos de Java. Los datos primitivos se escriben en minúsculas y los wrappers se escriben con la primera letra en mayúsculas.

Tipo primitivo Wrapper asociado
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Char
boolean Boolean

Cada clase wrapper tiene dos constructores, uno se le pasa por parámetro el dato de tipo primitivo y otro se le pasa un String.

Para wrapper Integer:

1
2
Integer(int)
Integer(String)

Ejemplo:

1
2
3
4
Integer i1 = new Integer(42);
Integer i2 = new Integer ("42");
Float f1 = new Float(3.14f);
Float f2 = new Float ("3.14f");

Antiguamente, una vez asignado un valor a un objeto o wrapper Integer, este no podía cambiarse. Actualmente e internamente se apoyan en variables y wrapers internos para poder variar el valor de un wrapper.

Ejemplo:

1
2
3
Integer y = new Integer(567);       //Crea el objeto
y++;                                //Lo desenvuelve, incrementa y lo vuelve a envolver 
System.out.println("Valor: " + y);  //Imprime el valor del Objeto y

Los wrapper disponen de una serie de métodos que permiten realizar funciones de conversión de datos. Por ejemplo, el wrapper Integer dispone de los siguientes métodos:

Método Descripción
Integer(int)
Integer(String)
Constructores
byteValue()
shortValue()
intValue()
longValue()
doubleValue()
floatValue()
Funciones de conversión con datos primitivos
Integer decode(String)
Integer parseInt(String)
Integer parseInt(String, int)
Integer valueOf(String)
String toString()
Conversión a String
String toBinaryString(int)
String toHexString(int)
String toOctalString(int)
Conversión a otros sistemas de numeración
MAX_VALUE, MIN_VALUE, TYPE Constantes

Métodos valueOf()

El método valueOf() permite crear objetos wrapper y se le pasa un parámetro String y opcionalmente otro parámetro que indica la base en la que será representado el primer parámetro.

Ejemplo:

1
2
3
4
5
6
7
// Convierte el 101011 (base 2) a 43 y le asigna el valor al objeto Integer i3 
Integer i3 = Integer.valueOf("101011", 2);
System.out.println(i3);

// Asigna 3.14 al objeto Float f3 
Float f3 = Float.valueOf("3.14f");
System.out.println(f3);

Métodos xxxValue().

Los métodos xxxValue() permiten convertir un wrapper en un dato de tipo primitivo y no necesitan argumentos.

Ejemplo:

1
2
3
4
5
6
7
8
9
Integer i4 = 120; // Crea un nuevo objeto wrapper
byte b = i4.byteValue(); // Convierte el valor de i4 a un primitivo byte 
short s1 = i4.shortValue(); // Otro de los métodos de Integer
double d = i4.doubleValue(); // Otro de los métodos xxxValue de Integer 
System.out.println(s1); // Muestra 120 como resultado

Float f4 = 3.14f; // Crea un nuevo objeto wrapper
short s2 = f4.shortValue(); // Convierte el valor de f4 en un primitivo short
System.out.println(s2); // El resultado es 3 (truncado, no redondeado)

Métodos parseXxxx()

Los métodos parseXxxx() permiten convertir un wrapper en un dato de tipo primitivo y le pasamos como parámetro el String con el valor que deseamos convertir y opcionalmente la base a la que convertiremos el valor (2, 8, 10 o 16).

Ejemplo:

1
2
3
4
double d4 = Double.parseDouble("3.14"); // Convierte un String a primitivo 
System.out.println("d4 = " + d4);   // El resultado será d4 = 3.14 
long l2 = Long.parseLong("101010", 2);  // un String binario a primitivo
System.out.println("l2 = " + l2);   // El resultado es l2 = 42

Métodos toString()

El método toString() permite retornar un String con el valor primitivo que se encuentra en el objeto contenedor. Se le pasa un parámetro que es el wrapper y opcionalmente para Integer y Long un parámetro con la base a la que convertiremos el valor (2, 8, 10 o 16).

Ejemplo:

1
2
3
4
5
6
Double d1 = new Double("3.14");
System.out.println("d1 = " + d1.toString() ); // El resultado es d = 3.14 
String d2 = Double.toString(3.14); // d2 = "3.14"
System.out.println("d2 = " + d2); // El resultado es d = 3.14 
String s3 = "hex = " + Long.toString(254, 16); // s3 = "hex = fe" 
System.out.println("s3 = " + s3); // El resultado es s3 = hex = fe

Métodos toXxxxxString() (Binario, Hexadecimal y Octal)

Los métodos toXxxxxString() permiten a las clases contenedoras Integer y Long convertir números en base 10 a otras bases, retornando un String con el valor primitivo que se encuentra en el objeto contenedor.

Ejemplo:

1
2
3
4
String s4 = Integer.toHexString(254); // Convierte 254 a hex 
System.out.println("254 es " + s4); // Resultado: "254 es fe" 
String s5 = Long.toOctalString(254); // Convierte 254 a octal
System.out.println("254(oct) = " + s5); // Resultado: "254(oct) = 376"

Resumen

Para resumir, los métodos esenciales para las conversiones son:

  • primitive xxxValue() – Para convertir de Wrapper a primitive
  • primitive parseXxx(String) – Para convertir un String en primitive
  • Wrapper valueOf(String) – Para convertir String en Wrapper

Ejemplo Anexo UD05

Anexo1Wrappers

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package es.martinezpenya.ejemplos.UD05;

public class Anexo1Wrappers {

    public static void main(String[] args) {

        // WRAPPERS
        //Integer i1 = new Integer(42); // Obsoleto (deprecated)
        Integer i1 = Integer.valueOf(42);
        //Integer i2 = new Integer("42");// Obsoleto (deprecated)
        Integer i2 = Integer.valueOf("42");
        //Float f1 = new Float(3.14f);// Obsoleto (deprecated)
        Float f1 = Float.valueOf(3.14f);
        //Float f2 = new Float("3.14f");// Obsoleto (deprecated)
        Float f2 = Float.valueOf("3.14f");

        Integer y = Integer.valueOf(567);      //Crea el objeto
        y++;                   //Lo desenvuelve, incrementa y lo vuelve a envolver 
        System.out.println("Valor: " + y); //Imprime el valor del Objeto y     

        // VALUEOF
        // Convierte el 101011 (base 2) a 43 y le asigna el valor al objeto Integer i1 
        Integer i3 = Integer.valueOf("101011", 2);
        System.out.println(i3);

        // Asigna 3.14 al objeto Float f3 
        Float f3 = Float.valueOf("3.14f");
        System.out.println(f3);

        // XXXVALUE
        Integer i4 = 120; // Crea un nuevo objeto wrapper
        byte b = i4.byteValue(); // Convierte el valor de i2 a un primitivo byte 
        short s1 = i4.shortValue(); // Otro de los métodos de Integer
        double d = i4.doubleValue(); // Otro de los métodos xxxValue de Integer 
        System.out.println(s1); // Muestra 120 como resultado

        Float f4 = 3.14f; // Crea un nuevo objeto wrapper
        short s2 = f4.shortValue(); // Convierte el valor de f2 en un primitivo short
        System.out.println(s2); // El resultado es 3 (truncado, no redondeado)

        // PARSEXXXX
        double d4 = Double.parseDouble("3.14"); // Convierte un String a primitivo 
        System.out.println("d4 = " + d4);   // El resultado será d4 = 3.14 
        long l2 = Long.parseLong("101010", 2);  // un String binario a primitivo
        System.out.println("l2 = " + l2);   // El resultado es L2 42

        // TOSTRING
        Double d1 = Double.valueOf("3.14");
        System.out.println("d1 = " + d1.toString()); // El resultado es d = 3.14 
        String d2 = Double.toString(3.14); // d2 = "3.14"
        System.out.println("d2 = " + d2); // El resultado es d = 3.14 
        String s3 = "hex = " + Long.toString(254, 16); // s = "hex = fe" 
        System.out.println("s3 = " + s3); // El resultado es d = 3.14

        // TOXXXSTRING
        String s4 = Integer.toHexString(254); // Convierte 254 a hex 
        System.out.println("254 es " + s4); // Resultado: "254 es fe" 
        String s5 = Long.toOctalString(254); // Convierte 254 a octal
        System.out.println("254(oct) = " + s5); // Resultado: "254(oct) = 376"
    }
}