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