2010-11-23 11 views
9

He oído que el compilador (¿o era la JVM?) Usará automáticamente un StringBuilder para algunas concatenaciones de cadenas. ¿Cuándo es el momento adecuado para declarar explícitamente uno? No necesito un StringBuffer por ser seguro para subprocesos.¿Cuándo StringBuffer/StringBuilder no es utilizado implícitamente por el compilador?

Gracias.

+1

posible duplicado de [¿Qué sucede cuando Java Compiler ve muchas concatenaciones de cadenas en una línea?] (Http://stackoverflow.com/questions/1296571/what-happens-when-java-compiler-sees-many-string- concatenations-in-one-line) –

+1

Nota: una situación en la que no usará un StringBuilder es cuando la cadena se puede concatenar en el momento de la compilación. En cuyo caso, solo produce una cadena en solitario (sin StringBuilder) –

+0

BTW: si alguna vez necesita utilizar StringBuffer para seguridad de subprocesos, tiene un problema de diseño en mi humilde opinión. : P –

Respuesta

14

El compilador lo usará automáticamente para cualquier concatenación de cadenas con "+".

Por lo general, lo usaría explícitamente si quisiera concatenar en un bucle. Por ejemplo:

StringBuilder builder = new StringBuilder(); 
for (String name : names) 
{ 
    builder.append(name); 
    builder.append(", "); 
} 
if (builder.length() > 0) 
{ 
    builder.setLength(builder.length() - 2); 
} 
System.out.println("Names: " + builder); 

Otra situación sería donde quería construir una cadena a través de múltiples métodos, o posiblemente conditionalise algunas partes del edificio. Básicamente, si no está compilando la cadena en una sola instrucción (donde el compilador puede ayudarlo), al menos debería considerar usar StringBuilder.

+1

Creo que vale la pena mencionar que 'StringBuilder' _no__será usado en casos como este:' String str = ""; str + = '. –

+0

¡Ah, eso tiene sentido, gracias! Por cierto, pensé que eras un chico de C#; 0) –

+0

@Matt interesante, gracias por la sugerencia –

Cuestiones relacionadas