Forum Main Page > [Tutoriais] - Boas Práticas de Programação

Entenda que os parâmetros são passados por valor...

Goto page 1

New Topic    Reply Message
  1. Comment Arrow




  1. Tutoriais Admin
    Offline
    Posts: 66

    Comment Arrow

    Publicado em: 10/04/2009 05:18:44



    Esta página exibe apenas os comentários deste tutorial, para ler o artigo, clique aqui.






  1. filipiz
    Offline
    Posts: 3

    Comment Arrow

    Publicado em: 10/04/2009 05:18:44

    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.




  1. TriTonE
    Offline
    Posts: 1566

    Comment Arrow

    Publicado em: 10/04/2009 05:18:44

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




  1. filipiz
    Offline
    Posts: 3

    Comment Arrow

    Publicado em: 10/04/2009 05:18:44

    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?




  1. TriTonE
    Offline
    Posts: 1566

    Comment Arrow

    Publicado em: 10/04/2009 05:18:44

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




  1. filipiz
    Offline
    Posts: 3

    Comment Arrow

    Publicado em: 10/04/2009 05:18:44

    Agora esse tópico tá completo!

    Muito obrigado pela ajuda cara!




  1. jr
    Offline
    Posts: 6

    Comment Arrow

    Publicado em: 10/04/2009 05:18:44

    Obrigado pelo bom tópico,,,
    consegui esclarecer algumas duvidas...
    muito bem escrito e muito bem explicado pelos d+ participantes...
    GRATO...




  1. Relacionados




  1. Anunciante





New Topic    Reply Message     Forum Main Page -> [Tutoriais] - Boas Práticas de Programação


Goto page 1