Seja bem vindo ao Fórum do JavaFree.org
Aqui você irá encontrar respostas para TUDO o que você precisa sobre java.
Deseja participar? Crie sua conta ou efetue seu login
Na primeira linha, um objeto String é criado com o valor "Eita nóis" e a variável 'str' referencia este objeto.
Na segunda linha, é criado um OUTRO objeto, contendo o valor "Eita nóis, muito chato isso!" e a variável 'str' é reatribuída de modo a referenciar a nova String. Note que a String que continha somente o "Eita nóis" ainda existe, mas não é referenciada pela variável 'str' (tornando-se elegível para coleta de lixo - mas isso não importa agora).
Ou seja, o objeto String não têm o seu valor alterado: sempre que você mexe numa string, um novo objeto é criado.
Sabendo isso..
Quando você passa uma String por parâmetro, a variável 's' ainda referencia o mesmo objeto referenciado por 'str', criado no início do método main.
Quando você modifica a String dentro do método 'teste', um novo objeto é criado dentro do escopo do método, com o valor "Teste1, Teste2". Então, quando o método termina de ser executado, este objeto deixa de existir. A string original não foi modificada, e ainda é referenciada pelo objeto 'str'.
PS: Deu pra entender alguma coisa q eu disse? :P
_________________ Daniel F. Martins Website, Blog
Então, caso você precise alterar um objeto String, então utilize a classe StringBuffer.
Neste exemplo, eu concateno um valor na String.
Como mostrado, a classe StringBuffer é uma alternativa à 'imutabilidade' (aff) da classe String, permitindo então que seu conteúdo seja realmente modificado.
[]'s
PS: Deu pra entender, de novo?!? So meio ruim pra explicar as coisas! :P
_________________ Daniel F. Martins Website, Blog
Anunciante
Tutoriais Admin Offline
Posts: 66
Esta página exibe apenas os comentários deste tutorial, para ler o artigo, clique aqui.
filipiz Offline
Posts: 3
String é um objeto certo?
Eu fiz um método onde eu passo uma String e um HashMap por parâmetro.
Os dois objetos devem ser alterados: a string vai ser concatenada com outra string e serão adicionados parâmetros no HashMap.
Quando o foco retorna pro método chamador, o HashMap vem alterado, mas a string não!!
seria algo assim:
o map vem com o parâmetro adicionado, mas a string não.
Alguém pode me dizer porque?
Eu entenderia se String fosse um tipo primitivo.
TriTonE Offline
Posts: 1566
String são imutáveis! Acompanhe o raciocínio:
Na primeira linha, um objeto String é criado com o valor "Eita nóis" e a variável 'str' referencia este objeto.
Na segunda linha, é criado um OUTRO objeto, contendo o valor "Eita nóis, muito chato isso!" e a variável 'str' é reatribuída de modo a referenciar a nova String. Note que a String que continha somente o "Eita nóis" ainda existe, mas não é referenciada pela variável 'str' (tornando-se elegível para coleta de lixo - mas isso não importa agora).
Ou seja, o objeto String não têm o seu valor alterado: sempre que você mexe numa string, um novo objeto é criado.
Sabendo isso..
Quando você passa uma String por parâmetro, a variável 's' ainda referencia o mesmo objeto referenciado por 'str', criado no início do método main.
Quando você modifica a String dentro do método 'teste', um novo objeto é criado dentro do escopo do método, com o valor "Teste1, Teste2". Então, quando o método termina de ser executado, este objeto deixa de existir. A string original não foi modificada, e ainda é referenciada pelo objeto 'str'.
PS: Deu pra entender alguma coisa q eu disse? :P
_________________
Daniel F. Martins
Website, Blog
"In JavaDoc we trust."
filipiz Offline
Posts: 3
Deu pra entender sim.
Pra resolver esse problema eu fiz o método retornar a String alterada. Mas eu achei uma solução "chunchada".
Tentei usar o método .concat() mas não funcionou.
Você sabe alguma solução para alterar a String sem ser da forma como eu fiz?
TriTonE Offline
Posts: 1566
Então, caso você precise alterar um objeto String, então utilize a classe StringBuffer.
Neste exemplo, eu concateno um valor na String.
Como mostrado, a classe StringBuffer é uma alternativa à 'imutabilidade' (aff) da classe String, permitindo então que seu conteúdo seja realmente modificado.
[]'s
PS: Deu pra entender, de novo?!? So meio ruim pra explicar as coisas! :P
_________________
Daniel F. Martins
Website, Blog
"In JavaDoc we trust."
filipiz Offline
Posts: 3
Agora esse tópico tá completo!
Muito obrigado pela ajuda cara!
jr Offline
Posts: 6
Obrigado pelo bom tópico,,,
consegui esclarecer algumas duvidas...
muito bem escrito e muito bem explicado pelos d+ participantes...
GRATO...
Relacionados
Passagem de Parametro http://javafree.uol.com.br/topic-820-Passagem-de-Parametro.html Não insere no banco Mysql?? http://javafree.uol.com.br/topic-4797-Nao-insere-no-banco-Mysql.html Passagem de parâmetros http://javafree.uol.com.br/topic-3068-Passagem-de-parametros.html Java por valor ou por referência??? http://javafree.uol.com.br/topic-5850-Java-por-valor-ou-por-referencia.html STRUTS - Passar mais de 2 parametros no HTML:LINK http://javafree.uol.com.br/topic-6886-STRUTS-Passar-mais-de-2-parametros-no-HTML-LINK.html Métodos genéricos no Java 5 http://javafree.uol.com.br/topic-12539-Metodos-genericos-no-Java-5.html invoke http://javafree.uol.com.br/topic-3279-invoke.html Data inserida pelo usuário http://javafree.uol.com.br/topic-14420-Data-inserida-pelo-usuario.html IReport (RESOLVIDO) http://javafree.uol.com.br/topic-865439-IReport-RESOLVIDO.html
Anunciante