uso que objetos métodos inmutables clase java stringbuilder

java - que - string buffer



¿Por qué usar StringBuilder explícitamente si el compilador convierte la concatenación de cadenas en un StringBuilder automáticamente? (2)

Posible duplicado:
StringBuilder vs Concatenación de cadenas en toString () en Java

Me pregunto, dado que el compilador usa internamente un StringBuilder para agregar 2 cadenas al realizar una concatenación de cadenas, entonces ¿cuál es el punto y por qué debería molestarme en usar StringBuilder si la concatenación de cadenas ya hizo el trabajo por usted? ¿Hay alguna otra razón específica?


¿Dónde está asumiendo que la concatinación de cuerdas utiliza un generador de cuerdas internamente? Tal vez un concat simple se optimiza, pero esto definitivamente no:

String s = ""; for (int i = 0; i < 1000; i++){ for (int j = 0; j < 1000; j++){ s+= "" + i + j } }


Como mencionas, no deberías usar StringBuilder lugar de una expresión de concatenación de cadenas simple como a + " = " + b . Este último es más rápido de escribir, más fácil de leer, y el compilador utilizará un StringBuilder internamente de todos modos, por lo que no hay una ventaja de rendimiento al reescribirlo.

Sin embargo, StringBuilder es útil si está concatenando un gran número de cadenas en un bucle. El siguiente código es ineficiente. Requiere tiempo O (n 2 ) para ejecutarse y crea muchas cadenas temporales.

String result = ""; for (int i = 0; i < foo.length; ++i) { result += bar(foo[i]); // Bad }

Pruebe esto en su lugar:

StringBuilder sb = new StringBuilder(); for (int i = 0; i < foo.length; ++i) { sb.append(bar(foo[i])); } String result = sb.toString();

El compilador optimiza solo expresiones simples a + b + c . No puede optimizar el código anterior automáticamente.