Pequena dúvida String - SCJP 6.0

7 respostas
gabrielmassote

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?

obrigado e abraço a todos.

7 Respostas

T
String s1 = "string1";

s1 = s1 + "string 2";

Vamos lá.

  1. 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.
  2. s1 = “string1” quer dizer que a variável s1 agora tem uma referência para o objeto “string1” que está no pool.
  3. s1 = s1 + “string 2” é uma abreviação para:
s1 = (new StringBuilder (s1).append ("string 2")).toString();

Ou seja:

  • 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

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:

String a = "x";
String b = "x";
System.out.println(a==b);
T

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

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…

abraco a todos.

Criado 12 de agosto de 2008
Ultima resposta 12 de ago. de 2008
Respostas 7
Participantes 3