Pequena dúvida String - SCJP 6.0  XML
Índice dos Fóruns » Certificação Java
Autor Mensagem
gabrielmassote
Java Ninja
[Avatar]

Membro desde: 20/04/2007 17:58:30
Mensagens: 258
Offline

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.

Bacharelado: PUC Minas Poços de Caldas - 2008
Mestrado: Mestrando UFSCar - Atual
Certificações: Sun Certified Java Programmer 6 - 77%

Gabriel Massote Prado

E-mail: gabrielmassote@gmail.com
MSN: gabriel_massote@hotmail.com
[WWW] [MSN]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline



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:

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).


[WWW]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

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.
[WWW]
victorwss
JWizard
[Avatar]

Membro desde: 18/12/2007 14:46:00
Mensagens: 2409
Localização: São Paulo - SP
Offline

thingol wrote: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:

This message was edited 2 times. Last update was at 12/08/2008 19:05:01

[MSN]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Bom saber. É que devo ter resolvido rapidamente e não prestado atenção nisso.
[WWW]
gabrielmassote
Java Ninja
[Avatar]

Membro desde: 20/04/2007 17:58:30
Mensagens: 258
Offline

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

Bacharelado: PUC Minas Poços de Caldas - 2008
Mestrado: Mestrando UFSCar - Atual
Certificações: Sun Certified Java Programmer 6 - 77%

Gabriel Massote Prado

E-mail: gabrielmassote@gmail.com
MSN: gabriel_massote@hotmail.com
[WWW] [MSN]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

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.
[WWW]
gabrielmassote
Java Ninja
[Avatar]

Membro desde: 20/04/2007 17:58:30
Mensagens: 258
Offline

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.

Bacharelado: PUC Minas Poços de Caldas - 2008
Mestrado: Mestrando UFSCar - Atual
Certificações: Sun Certified Java Programmer 6 - 77%

Gabriel Massote Prado

E-mail: gabrielmassote@gmail.com
MSN: gabriel_massote@hotmail.com
[WWW] [MSN]
 
Índice dos Fóruns » Certificação Java
Ir para:   
Powered by JForum 2.1.8 © JForum Team