Está en la página 1de 14

Objetos contenedores de datos (Wrappers)

Carlos Andrs Ardila carlosardila@dicosoftware.com Juan Pablo Ramrez juanramirez@dicosoftware.com

http://www.dicosoftware.com/contenidoCurso.html

Objetos contenedores de datos Objetivos

Proveer un mecanismo para encapsular los valores primitivos en objetos, para que puedan ser utilizados en actividades reservadas para los objetos.
Utilizacin de listas o colecciones Ser considerado una subclase del Object

Proveer utilidades relacionadas con los datos primitivos:


Conversiones a String Decodificacin de un valor String Cambio a diferentes bases numricas

Los contenedores de datos son inmutables.

Objetos contenedores de datos Wrappers para datos primitivos Dato Primitivo boolean byte char double float int long short Wrapper Boolean Byte Character Double Float Integer Long Short Argumentos del constructor

boolean o String byte o String char double o String float, double, o String int o String long o String short o String

Objetos contenedores de datos Constructores

Todos los wrappers, excepto la clase Character, proveen dos constructores.


Uno que recibe el dato en su forma primitiva. Uno que recibe el dato en String
Integer i1 = new Integer(42); Integer i2 = new Integer("42"); Float f1 = new Float(3.14f); Float f2 = new Float("3.14f"); Character c1 = new Character('c'); Boolean b = new Boolean("false");

Objetos contenedores de datos Funcin ValueOf

Son mtodos estticos que se proveen en la mayora de las clases de wrappers. Su funcin es interpretar un argumento String como un objeto. Algunas clases de wrappers tienen esta funcin con un argumento adicional que indica la base de conversin.
Integer i2 = Integer.valueOf("101011", 2); //43 en base 2 Float f2 = Float.valueOf("3.14f");

Objetos contenedores de datos Funciones xxxValue

xxxValue define una familia de mtodos sin argumentos y que devuelven un tipo de dato primitivo (36 en total). tiles cuando se desea convertir un nmero a diferentes tipo de datos primitivos.
Integer i2 = new Integer(42); byte b = i2.byteValue(); short s = i2.shortValue(); double d = i2.doubleValue(); Float f2 = new Float(3.14f); short s = f2.shortValue(); //s=3 truncado

Objetos contenedores de datos Funciones parseXxx

Familia de mtodos que reciben un String y lo pasan a un tipo de dato primitivo. Estn presentes en cada clase wrapper (6 en total).
double d4 = Double.parseDouble("3.14"); long L2 = Long.parseLong("101010", 2);

Muy similares al mtodo valueOf(), pero los mtodos parseXxx devuelven un tipo de dato primitivo y los mtodos valueOf devuelven un objeto.

Objetos contenedores de datos Funciones ToString

Existen dos tipos de funciones toString en los contenedores de datos:


toString que sobre escribe el mtodo toString de la clase padre Object.
public String toString(){} Requiere instanciacin Devuelve la representacin en String del valor del tipo de dato primitivo

public static String toString(String str): sobrecarga de la funcion toString original, slo que no requiere instanciacin.
Existe una sobrecarga que recibe como segundo argumento la base para la conversin.

Objetos contenedores de datos Funciones ToXxxString

Los contenedores de datos int y long, permiten cambiar de base los valores contenidos:
Mtodos estticos Retornan un String con el valor convertido a la base deseada
String s3 = Integer.toHexString(254); String s4 = Long.toOctalString(254);

Objetos contenedores de datos Resumen de las funciones

xxxValue() para convertir un Wrapper a un tipo de dato primitivo.

objeto

parseXxx(String) para convertir un String a un tipo de dato primitivo. valueOf(String) - para convertir un String a un objeto Wrapper

Objetos contenedores de datos Formas de conversin

Conversin de String a tipo de dato primitivo:


Si falla arroja una excepcin: NumberFormatException. Se puede hacer la conversin mediante el constructor, o llamando un mtodo esttico que provee cada clase. Cual es ms optimo?
Integer objInt = new Integer("42"); int i = objInt.getIntValue(); Int i = Integer.parseInt(42);

Objetos contenedores de datos Observaciones

Qu pasa si se desea incrementar un objeto contenedor de un nmero?


Integer y = new Integer(567); int x = y.intValue(); x++; y = new Integer(x); System.out.println("y = " + i); // se crea // se pasa a primitivo // se incrementa // se pasa a objeto // se imprime

Slo desde java 5 puede incrementarse un objeto Integer:


Integer y = new Integer(567); y++;

Objetos contenedores de datos Observaciones

Qu pasa si se crean 2 objetos contenedores con el mismo valor?


Integer i3 = 10; Integer i4 = 10;

Si los comparamos con el equals, dir que son iguales porque su valor es igual. Si los comparamos con el != nos dir que son diferentes porque son DOS objetos distintos. Si los comparamos con == nos dir que son los mismos objetos si se hace referencia a Boolean, Byte, Character, Short. Java ahorra memoria tomando estos objetos como iguales si su valor es el mismo.

Objetos contenedores de datos Ejemplo

Utilizando la clase VentanasBasicas, pedir un dato de pantalla y determinar el menor tipo de dato primitivo que lo puede contener
Ejemplos:
Pepe debe guardarse en un String 5 debe guardarse en un byte. P debe guardarse en un char. 100000 debe guardarse en un long 100,56 debe guardarse en un String (es . y NO ,) 56.07 debe guardarse en un float true debe guardarse en un boolean

También podría gustarte