Dúvidas com String

Buenas…
Estou com a seguinte dúvida
quando vc cria

String a = "a";
String b = new String("b");

no primeiro caso ele cria um obj no pool e referencia o obj a a este obj
no segundo ele cria o obj b diretamente no heap sem uma referencia no poll

mas o que acontece se eu criar isso: String teste = new String("TO" + "DO");?

O Java vai encapsular as Strings To + Do, formando uma unica String TODO, e colocala no HEAP.

Ou seja: tanto faz! Usar no pool ou não, as duas fazem a mesma coisas…
Sem querer desreitar, na minha opinião, é trocar ‘6’ por ‘Meia Dúzia’.

Abrçaos

quando vc der um print na variavel, por exemplo, vai sair TODO, por que vc está concatenando as duas strings, como já disseram, é 6 por meia dúzia

Nesse segundo caso ele so vai colocar no pool interno o TO e o DO porque foram definidas como constantes.
o TODO nao estara “internalizada” e voce precisara chamar o .intern() e pegar seu retorno se quiser “tentar economizar” memoria.
mas normalmente voce naod everia programar pensando no funcionamento interno do pool a nao ser que sua aplicacao seja muito intensiva no uso de Strings

Vou contar um problema que vi em algum blog (sorry, não anotei onde foi).
Em uma biblioteca de XML (acho que era o Xerces ou o Xalan, não sei qual delas), para poder “economizar” no uso de strings e acelerar o processamento, os autores da biblioteca tentam “internalizar” todos os tags (ou seja, para saber se um tag <xyz> é igual a outro tag <xyz>, bastaria usar “==” em vez de “equals” porque a string “xyz” já está internada.
O problema é que essa biblioteca estourava a memória (mesmo quando você usava SAX em vez de DOM!) quando você a usava com um XML que tinha uma estrutura bastante estranha. Esse arquivo XML tinha vários megabytes, mas a informação vinha no nome da tag, não em seu conteúdo. O blogger achou esquisito isso, mas era o que ele tinha de ler. Esse arquivo era algo como:

&lt;xml&gt;
&lt;abcdef.xxxx.sjjsjjh.1222l2.2009 a="abcd" b="efggfh"/&gt;
&lt;abcdef.xxxx.sjjsjjh.1222l2.2010 a="abcd" b="efggfh"/&gt;
&lt;abcdef.xxxx.sjjsjjh.1222l2.2011 a="abcd" b="efggfh"/&gt;
&lt;!-- seguem-se milhões de linhas --&gt;
&lt;effggg.xxxx.sjjsjjh.x909x0.1999 a="9099" b="xi9090"/&gt;
&lt;/xml&gt;

O blogueiro acabou resolvendo seu problema lendo o XML “no braço” e usando expressões regulares (argh), mas isso indica que nem sempre internalizar uma string é uma boa idéia.

na verdade eu estou usando essa concatenacao pq eu tenho q montar um query e o cliente tem alguns criterios como
O CODIGO NAO PODE PASSAR DE 80 CARACTERES
isso mesmo, não posso escrever uma linha de codigo com mais de 80!!!
então eu estou declarando da seguinte forma

private static final String QUERY =
        new String(
            "SELECT "
                + "aaaa, "
                + "bbbb  "
                + "FROM "
                + "tabela");

Eu pensei de usar um StringBuffer (eu tenho q usar o 1.4…) mas acho q nao fica tao legivel pelos appends.Bom, a questão é, devo usar msm assim o StringBuffer ou essa concatenação dentro do contrutor não tera muito efeito