Objetos Mutables e Inmutables , String vs StringBuffer , StringBuilder

Cuales son los objetos Inmutables?

Los objetos inmutables no cambian una ves que son instanciados, se convierten en objetos de solo lectura luego de la instanciación, los objetos inmutables son ideales para representar números ( como java.lang.Integer, java.lang.Float, java.lang.BigDecimal etc ) , enumerated types, colores (java.awt.Color)

Y Cuales son los beneficios de los objetos Inmutables?

Las clases inmutables son intrínsecamente Thread-safe y por este motivo no hace falta sincronizar el acceso a ellos cuando se utilizan dentro de un ambiente multi-hilo.

Elimina la posibilidad de que los datos se vuelvan inaccesibles cuando se usan como llaves en HashMaps o como elementos en Sets.

Y que hay de los objetos mutables?

Bien, los objetos mutables son los que pueden cambiar su estado, considere este ejemplo

 List  listado = new ArrayList ();
 System .out.println( “tamaño listado : “ + listado.size() ); 
//SALIDA: tamaño listado :  0
listado.add("y");
System .out.println( “tamaño listado : “ + listado.size() ); 
//SALIDA: tamaño listado :  1

Que diferencia hay entre String y StringBuffer / StringBuilder

String es inmutable, no se puede modificar el objeto String pero se puede reemplazar creando una nueva instancia. El problema de crear nuevas instancias es sumamente costoso.

//versión inmutable
String salida = “texto prueba”;
for(int=0;1<100;i++)
{
salida+=i;
}
return salida;

 

En ell código de arriba se crean 99 nuevos Objetos pero inmediatamente 98 son desechados. Crear nuevos objetos no es eficiente.

Tambien existen otras formas de crear un String utilizando concat(),trim,substring(), y replace(), estos métodos generan nuevas instancias.

 

StringBuilder / StringBuffer es mutable,  lo correcto es utilizar StringBuilder o StringBuffer cuando se desea modificar de manera continua el contenido. StringBuilder fue agregado en java 5 y es idéntico a StringBuffer excepto en que no es sincronizado.


//versión mutable
String salida = new StringBuffer(105);
Salida.append(“hello”);
for(int=0;1<112;i++){
salida.append(i);
}
return salida.toString() ;

en este ejemplo creamos solo dos objetos el StringBuffer y el String devuelto.

Anuncios

Etiquetas: , , , , ,

About exequielc

Hola! Estás en el blog de Exequiel Catalani. Como es un blog, se trata de una extensión más o menos lineal de las cosas que hago y pasan por mi cabeza: ciberculturas, videos de la red, nuevos medios y tecnologia, y Programacion etc...

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: