É suposto ser geralmente preferível utilizar um StringBuilder
para concatenação de cordas em Java. É sempre este o caso?
O que eu quero dizer é isto: A sobrecarga de criar um objecto 'StringBuilder', chamando o método 'append()append()
e finalmente toString()
já é menor do que concatenar as cordas existentes com o operador `+' para duas cordas, ou é apenas aconselhável para mais (do que duas) cordas?
Se existe um tal limiar, de que depende (talvez do comprimento da corda, mas de que forma)?
E finalmente, trocaria a legibilidade e concisão da concatenação "+" pelo desempenho do "StringBuilder" em casos mais pequenos como duas, três ou quatro cordas?
A utilização explícita de StringBuilder
para concatenações regulares está a ser mencionada como obsoleta em dicas obsoletas de optimização Java bem como em mitos urbanos Java.
Como regra geral, utilizar sempre o código mais legível e só refactor se o desempenho for um problema. Neste caso específico, o mais recente JDK's irá de facto optimizar o código para a versão StringBuilder em qualquer caso.
Normalmente só precisa de o fazer manualmente se estiver a fazer concatenação de strings num laço ou em algum código complexo que o compilador possa't facilmente optimizar.
Dê uma olhada em: http://www.javaspecialists.eu/archive/Issue068.html e http://www.javaspecialists.eu/archive/Issue105.html
Faça os mesmos testes no seu ambiente e verifique se os mais recentes JDK ou a sua implementação Java fazem melhor algum tipo de operação de string com "String" ou melhor com "StringBuilder".
O material de certificação da Microsoft aborda esta mesma questão. No mundo .NET, a sobrecarga para o objecto StringBuilder torna mais eficiente uma simples concatenação de 2 objectos String. Eu assumiria uma resposta semelhante para as cordas Java.