Dúvida com Objeto String

6 respostas
jc_oz

Pessoal, já vi em alguns lugares a seguinte frase:

Bem, aí surgiu um zilhão de sinais de iterrogação na minha cabeça. Se eu fizer o seguinte código:

public class TestendoString { public static void main(String[] args) { String teste = new String(); teste = "Testando 1"; System.out.println(teste); teste = "Testando 2"; System.out.println(teste); teste = "Testando 3"; System.out.println(teste); teste = teste + "... Sei-lá, mudou, não mudou???"; System.out.println(teste); } }

Eu mudei a string, não mudei, ou sou eu que estou ficando louco :silly: (hipótese mais provavel) e não estou entendendo mais nada de tanto ler esse livro de capa amarelo com formiguinhas por todo lado… :?: :?: :?:

Valeu pessoal!!! :wink:

6 Respostas

TedLoprao

é o seguinte, cada vez que vc fizer a atribuição, será criado um novo objeto string na memória. Ou seja, não será usada a instancia já existente…

No seu último exemplo

teste = teste + "... Sei-lá, mudou, não mudou???";

vc possui três objetos string diferentes, um é “Testando 3”, o outro é “… Sei-lá, mudou, não mudou???” e o útlimo é “Testando 3… Sei-lá, mudou, não mudou???”.
A variável teste estará com uma referência para esse último objeto, mas ele não pegará o objeto “Testando 3” e fará a concatenação…
É isso que quer dizer o livro…

Espero ter ajudado (tlvz só tenha te confundido, sei lá, :lol: )

jc_oz

Não confundiu não, ajudou muito!!!

Tks!!! :wink:

jc_oz

Agora, pensando um pouco melhor sobre o assunto, o que acontece com os objetos “anteriores”?? Explicando melhor:

Seguindo o meu exemplo e a sua explicação, no momento em que eu faço a atribuição:

teste = "Testando 2";

é criado um novo objeto String chamado “teste” com o conteúdo “Testando 2”, certo? Mas o que acontece com o objeto “anterior” (teste = “Testando 1”) ??? Simplesmente deixa de existir?

Valeu!!! :wink:

Bani

O objeto anterior fica jogado na memória, sem nenhuma referência para ele (portanto inacessível), até o Garbage Collector resolver passar.
Obs.: tecnincamente falando, “teste” não é o nome do objeto, é o nome da referência ao objeto.

Acho que vale a pena você ler este artigo do GUJ sobre Strings, é bem interessante.

TedLoprao

Como a Bani falou, lembre que teste não é o objeto, ele apenas “aponta” para o objeto, quando vc atribui o “Testando 2” a variavel começara a “apontar” para esse novo objeto. E o oturo ficará na memória até o nosso amigo Garbage passar, hehehe

Fallow

jc_oz

“Bani”:
O objeto anterior fica jogado na memória, sem nenhuma referência para ele (portanto inacessível), até o Garbage Collector resolver passar.
Obs.: tecnincamente falando, “teste” não é o nome do objeto, é o nome da referência ao objeto.

Ok, Bani, entendi!!! :wink:

“Bani”:

Acho que vale a pena você ler este artigo do GUJ sobre Strings, é bem interessante.

:shocked!: Devo estar bebado ou alguma coisa muito similar a isso, acredita que não tinha visto esse artigo aqui no GUJ??? :oops:

“TedLoprao”:
Como a Bani falou, lembre que teste não é o objeto, ele apenas “aponta” para o objeto, quando vc atribui o “Testando 2” a variavel começara a “apontar” para esse novo objeto. E o oturo ficará na memória até o nosso amigo Garbage passar, hehehe

Fallow

Ok Rodrigo, entendi perfeitamente!!!

Valeu!!! :smiley:

Criado 24 de fevereiro de 2004
Ultima resposta 24 de fev. de 2004
Respostas 6
Participantes 3