Caro Leonardo

  Você está parcialmente certo. Quando um método
recebe como parâmetro um objeto, o VALOR desse
parâmetro é uma REFERÊNCIA (é esse ponto que causa a
confusão ...). Isto está bem claro no link que você
mesmo passou. Porém, seu exemplo não é válido, pois é
possível SIM alterar atributos de objetos passados
para métodos.

  O que acontece no seu exemplo é que objetos da
classe String são imutáveis. Então, você tem um
referência a um objeto String no método main, e quando
chama o método "teste(str)" o que acontece é que a
variável local do método recebe uma nova referência a
um objeto String, quando você executa a linha 's =
"Valor 2";' (já que a String recebida não pode ser
alterada por ser IMUTÁVEL).

  No link que você passou há um exemplo com um objeto
não-imutável (quase no fim da página), que mostra a
passagem por valor de um referência funcionando como
deveria ;)

  Conclusão: Acredito que seja correto pensar que a
passagem de objetos para métodos ocorre por valor ou
por referência, dependendo apenas da interpretação de
cada um. O importante é entender que o que os métodos
recebem é uma REFERÊNCIA (ou VALOR do tipo REFERÊNCIA)
e não uma cópia do objeto original.

  Não sei se consegui ser claro, se não consegui me
fale que eu tento explicar melhor ;)


 --- Leonardo Hartleben Reinehr <[EMAIL PROTECTED]>
escreveu: > 
> Olá,
> 
> > Ainda acredito que quando a passagem for de
> objetos será por referência 
> > e não por valor...
> 
> Em Java, parâmetros são sempre passados por valor,
> independente se o parâmetro é um objeto ou um tipo
> primitivo. Faça o teste a seguir que você vai
> comprovar isso:
> 
> public class Teste {
>     public static void main(String[] args) {
>         String str = "Valor 1";
>         teste(str);
>         System.out.println(str);
>     }
> 
>     public static void teste(String s) {
>         s = "Valor 2";
>     }
> }
> 
> O texto que será impresso é "Valor 1".
> 
> Veja em
>
http://java.sun.com/docs/books/tutorial/java/javaOO/arguments.html,
> no item "Pass by Value", que lá explica direitinho o
> que acontece na passagem de parâmetros, e porque os
> casos que você colocou funcionam. Aqui na lista
> mesmo, há algum tempo, essa dúvida apareceu e houve
> bastante debate, dê uma olhada no histórico.
> 
> Um abraço,
> Leonardo
> 
> ------------------------------ LISTA SOUJAVA
> ----------------------------
> http://www.soujava.org.br  -  Sociedade de Usuários
> Java da Sucesu-SP
> dúvidas mais comuns:
> http://www.soujava.org.br/faq.htm
> regras da lista:
> http://www.soujava.org.br/regras.htm
> historico:
>
http://www.mail-archive.com/java-list%40soujava.org.br
> para sair da lista: envie email para
> [EMAIL PROTECTED]
>
-------------------------------------------------------------------------
>  

=====
_________________________________
Paulo "gangrel-br" R C Siqueira
Java Developer and Gamer :)
Mogi das Cruzes - SP - Brazil
Contato: (11) 9424-5474

_______________________________________________________________________
Yahoo! Mail
Mais espaço, mais segurança e gratuito: caixa postal de 6MB, antivírus, proteção 
contra spam.
http://br.mail.yahoo.com/

------------------------------ LISTA SOUJAVA ---------------------------- 
http://www.soujava.org.br  -  Sociedade de Usuários Java da Sucesu-SP 
dúvidas mais comuns: http://www.soujava.org.br/faq.htm
regras da lista: http://www.soujava.org.br/regras.htm
historico: http://www.mail-archive.com/java-list%40soujava.org.br
para sair da lista: envie email para [EMAIL PROTECTED] 
-------------------------------------------------------------------------

Responder a