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]
-