AOWS

Just another adrian’s weblog

Trabajando con String en Java (II): creando objetos String

with one comment

Cuando manejamos strings es bueno conocer cómo funcionan para saber qué consecuencias tiene una forma de programar u otra. Por ejemplo, estas dos sentencias en principio parecen equivalentes:

String s1 = "a string";
String s2 = new String("a string");

pero en realidad la segunda es más ineficiente, ya que crea 2 objetos por 1 de la primera sentencia. Probablemente nuestra aplicación no sufra penalización alguna por crear algún que otro objeto extra, pero al menos debemos ser conscientes de ello. Así, cuando concatenamos dos strings:

String s1 = "string 1";
String s2 = "string 2";
String s3 = s1 + s2;

estamos creando un objeto nuevo (los strings son inmutables y no se pueden modificar). Una clase que nos puede ayudar bastante a la hora de mejorar el rendimiento en este tipo de situaciones es StringBuilder.

String[] arrayOfStrings = new String[] { "1", "2", "3", "4", "5" };

// using "+" operator
String finalString = "";
for (String s : arrayOfStrings) {
    finalString += s;
}

// using StringBuilder
StringBuilder sb = new StringBuilder("");
for (String s : arrayOfStrings) {
    sb.append(s);
}
String finalString2 = sb.toString();

El primer bucle crea un objeto por cada concatenación que realiza, mientras que utilizando StringBuilder el único objeto de tipo String que se crea es cuando se llama a toString(). Por lo tanto parece sensato usar esta clase cuando se concatenan strings.

Por fortuna cuando las concatenaciones son “obvias”, por ejemplo:

String s = "1" + "2" + "3" + "4" + "5";

el compilador crea directamente un string con valor 12345. En casos más complicados:

String[] aS = new String[] { "1", "2", "3", "4", "5" };
String s = aS[0] + aS[1] + aS[2] + aS[3] + aS[4];

el compilador es lo suficientemente listo como para optimizar el código y crear un bytecode utilizando StringBuilder, por lo que la sentencia anterior sería equivalente a la siguiente:

String[] aS = new String[] { "1", "2", "3", "4", "5" };
String s = new StringBuilder(aS[0]).append(aS[1]).append(aS[2]).append(aS[3]).append(aS[4]).toString();

Más sobre los String

Written by adrian

8 mayo, 2009 a 16:45

Publicado en Uncategorized

Una respuesta

Subscribe to comments with RSS.

  1. […] Consideraciones al crear y operar con objetos String […]


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

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: