En este caso particular, los dos son en realidad idénticos. El compilador transformará la segunda variante, la que utiliza el operador +
, en una llamada a Concat, la primera variante.
Bueno, eso es, si los dos realmente contenían variables de cadena que se concatenaron.
este código:
B = "abc" + "def";
transforma realmente en esto, sin concatenación en absoluto:
B = "abcdef";
Esto se puede hacer porque el resultado de la suma se puede calcular en tiempo de compilación, por lo el compilador hace esto
Sin embargo, si tuviera que usar algo como esto:
A = String.Concat(stringVariable1, stringVariable2);
B = stringVariable1 + stringVariable2;
Entonces los dos va a generar el mismo código.
Sin embargo, me gustaría saber exactamente lo que esos "muchos" dijeron, ya que creo que es algo diferente.
Lo que creo que dijeron es que la concatenación de cadenas es mala, y debería usar StringBuilder o similar.
Por ejemplo, si usted hace esto:
String s = "test";
for (int index = 1; index <= 10000; index++)
s = s + "test";
Entonces lo que sucede es que para cada iteración a través del bucle, construirá una nueva cadena, y dejar que el viejo sea elegible para la recolección de basura.
Además, cada cadena nueva tendrá todos los contenidos de la antigua copiada en ella, lo que significa que moverá una gran cantidad de memoria.
Mientras que el código siguiente:
StringBuilder sb = new StringBuilder("test");
for (int index = 1; index <= 10000; index++)
sb.Append("test");
en su lugar utilizará un buffer interno, que es más grande que lo que es necesario, en caso de que es necesario añadir más texto en él. Cuando ese búfer se llene, se asignará uno nuevo que sea más grande y el anterior se deje para la recolección de basura.
Por lo tanto, en términos de uso de memoria y uso de CPU, la última variante es mucho mejor.
Aparte de eso, trataría de evitar enfocarme demasiado en "es la variante de código X mejor que Y", más allá de lo que ya tiene experiencia. Por ejemplo, uso StringBuilder ahora solo porque soy consciente del caso, pero eso no quiere decir que todo el código que escribo que lo use realmente lo necesite.
Trate de evitar perder tiempo micro-optimizando su código, hasta que sepa que tiene un cuello de botella. En ese momento, el consejo habitual sobre la medida primero, corte posterior, sigue vigente.
Con cadenas de este tamaño, no importará –