| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/08/2008 18:32:28
|
gabrielmassote
Java Ninja
![[Avatar]](/images/avatar/6c4ce2d66be954338a51e72eb79aae10.jpg)
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
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/08/2008 18:46:39
|
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).
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/08/2008 18:48:21
|
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.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/08/2008 19:03:21
|
victorwss
JWizard
![[Avatar]](/images/avatar/4ab232445f9b21b65dfdf6ea5f27f704.png)
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/08/2008 19:23:51
|
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.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/08/2008 21:36:00
|
gabrielmassote
Java Ninja
![[Avatar]](/images/avatar/6c4ce2d66be954338a51e72eb79aae10.jpg)
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/08/2008 21:42:07
|
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.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/08/2008 21:47:17
|
gabrielmassote
Java Ninja
![[Avatar]](/images/avatar/6c4ce2d66be954338a51e72eb79aae10.jpg)
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
|
|
|
 |
|
|