Tava estudando o capitulo de string ai me surgiu uma dúvida sobre o pool de strings.
no caso abaixo
String s1 = “string1”;
s1 = s1 + “string 2”;
a duvida é a seguinte:
a string s1 vai para o pool e um objeto é criado, certo? e no caso da “string 2” que será criado outro objeto, a string ira para o pool tbem? e a nova string que é criada a partir da concatenação?
No carregamento da classe que contém o código acima, a constante “string1” foi posta no pool. De modo geral, considere que todas as strings constantes (as que estão dentro de aspas) estão no pool.
s1 = “string1” quer dizer que a variável s1 agora tem uma referência para o objeto “string1” que está no pool.
Um objeto StringBuilder é alocado e inicializado com o conteúdo de s1
A seguir, chamamos o método “append” sobre o objeto StringBuilder criado, passando o objeto “string 2”
Por fim, esse StringBuilder é convertido para uma string, usando-se toString().
Essa string que foi criada (“string 1string 2”) é atribuída à variável s1, que deixa de se referir à antiga string “string 1”.
Nenhuma string vai sozinha para o pool (exceto, é claro, as que são constantes). Para uma string ir para o pool, você tem de chamar explicitamente seu método “intern”; o que ocorre ao chamarmos intern:
Uma nova string é criada no pool, contendo uma cópia da string original. A string original não é mudada de lugar nem posta no pool (isso é estranho mas é assim).
T
thingol
Olha, não sei se questões desse tipo caem na certificação. Eu lembro da minha prova de SCJP 5.0 e não lembro dessas coisas de pool. Acho que é mais uma lenda urbana.
victorwss
thingol:
Olha, não sei se questões desse tipo caem na certificação. Eu lembro da minha prova de SCJP 5.0 e não lembro dessas coisas de pool. Acho que é mais uma lenda urbana.
Cai sim. Essas questões muitas vezes não vêm explícitas que tem que usar o pool. Mas se o cara não souber que há um pool ele acaba errando. Por exemplo:
Stringa="x";Stringb="x";System.out.println(a==b);
T
thingol
Bom saber. É que devo ter resolvido rapidamente e não prestado atenção nisso.
gabrielmassote
a questao é a seguinte.
nao entendi mto bem o que vcs falaram ai…
mas sobre quantos objetos sao criados e tals to ligado.
por exemplo: tem um objeto para “string 1”, “string 2” e “string1string2”.
mas quais deles estarao no pool? “string 1” eu sei que sim.
abraco
T
thingol
Neste caso, apenas os seguintes objetos estarão no pool:
"string 1"
"string 2"
O objeto “string 1string2”, que foi criado mediante a concatenação das duas strings, não está no pool porque:
Não é uma constante string, e
Também não foi criado via String.intern.
gabrielmassote
valeu pessoal…
acho que tirei minha duvida…
pegando firme aqui nos estudos para a certificacao…to em uma parte meio chata, a de datas e etc…
mas vamo la…