Re: RES: [java-list] Pergunta for Dummies
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] -
Re: RES: [java-list] Pergunta for Dummies
Ólá, acho que qdo se fala a respeito de Java existe uma pequena divergencia . Digo isto pois fiz quando o curso na Sun e tive esta mesma duvida (duvida normal de quem ja desenvolveu em C#).. O que é dito em Java que tudo é passado por valor (by Value), significa que estamos passando sempre o valor de uma stack Qdo criamos instanciamos uma class ( Class v1 = new Class()), estamos alocando um espaço em memória e mais um pedacinho na chamada stack (local onde temos a variavel e o end. de memoria onde o objeto sera armazenado) Qdo criamos um tipo primitivo, o mesmo ficara somente na stack, ou seja, a variavel e seu valor serão alocados Logo quando dizemos que tudo é pass by value é por que estamos passando o valor da stack, ou seja, se passamos um tipo primitivo, estaremos passando (By Value) o próprio valor e este não sofrerá alteração. mas qdo passamos um objeto por referencia estaremos passando ainda By Value, mas desta vez, não estaremos passando o conteudo do objeto e sim o valor da referencia deste objeto, ou seja, o endereco de memória onde o objeto esta localizado o que significa que as modificacoes refletirao no objeto passado (seria o equivalente a passar um parametro como ^p1, ou seja por referencia) Não sei se ficou confuso mas foi a forma que achei para tentar explicar [ ]s From: "Leonardo Hartleben Reinehr" <[EMAIL PROTECTED]> Reply-To: [EMAIL PROTECTED] To: <[EMAIL PROTECTED]> Subject: RES: [java-list] Pergunta for Dummies Date: Wed, 21 May 2003 16:13:19 -0300 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] - _ MSN Hotmail, o maior webmail do Brasil. http://www.hotmail.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] -