Here we go again.... Se vc ler outros emails, verá que outras pessoas falaram a mesma coisa
q eu. Mas vamos a explicação. Vc deve saber que em java não existem ponteiros. Bem, isso é + ou –
verdade. Existem sim, só que vc não tem controle sobre o endereçamento, a
finalização, etc. Este ponteiro é conhecido como referência. Quando vc faz: Objeto ref = new Objeto(); A “variável” ref não é o
objeto em si, mas uma referencia para o mesmo. Graficamente: Considere o seguinte método: 1: void metodo(Objeto ref2){ 2: 3: ref2.alteraCampoInterno(); 4: ref2 = new Objeto(); 5: ref2.alteraCampoInterno(); 6: 7: } Possuir a referência significa que quando vc passa “um objeto”
como parâmetro para um método, na verdade vc passa a referência. Considerando
que em java SÓ EXISTE PASSAGEM POR VALOR, quando vc faz: metodo(ref); é feita uma cópia da referência. Na prática, temos duas referências
apontando para o mesmo objeto. Uma no escopo externo ao método e outra no
escopo interno. Graficamente: Se vc, atraves de ref2 realizar
alguma alteração no Objeto (como ocorre na linha 3) certamente o efeito é o
mesmo da passagem por referência. Mas nas linhas seguintes, ref2 recebe uma nova referência, e a alteração não afeta em
nada o objeto original. Se fosse passagem por referência, a Figura 1 permaneceria inalterada logo
após entrar no método, com apenas uma referência (a do escopo externo)
apontando para o Objeto. Quando fosse executada a linha 4, o objeto original se
perderia, pois não haveria mais nenhuma referência para ele. O mesmo raciocínio pode ser aplicado a tipos primitivos, de forma mais
simples. Os textos da Sun, e mesmo de alguns autores, geram um pouco de dúvida. É
compreensível, pois o conceito de referência em Java causa certa confusão. Porém, digo e repito em caixa alta: EM JAVA, NÃO EXISTE PASSAGEM DE PASSAGEM DE PARÂMETROS POR REFERÊNCIA! SOMENTE POR VALOR! Mais alguma dúvida? Abraços, ---------------------------------------------------------------- Se você não perde cabeça quando todos ao redor já
perderem, talvez você apenas não esteja entendendo a situação. ----------------------------------------------------------------- -----Original Message----- tah maluco? onde tu leu isso? henrique On Wed, 6 Nov 2002, Denard Costa Soares wrote: > Galera, > > Em java, não existe passagem por referência, é sempre por valor.
Sem exceção. > Tipos primitivos ou não, é por valor. > > Abraços, > Denard C. Soares > ---------------------------------------------------------------- > Se você não perde cabeça quando todos ao redor já perderem, talvez
você apenas não esteja entendendo a situação. > ----------------------------------------------------------------- > > -----Original Message----- > From: Mário Roberto Porto Filho [mailto:[EMAIL PROTECTED]] > Sent: quarta-feira, 6 de novembro de 2002 13:23 > To: [EMAIL PROTECTED] > Subject: RES: [java-list] Duvida sobre atribuicao de objetos... > > Concordo com o Carlos..........é uma questão perigosa e todo mundo
sempre confunde, é normal até !!! > Mas em Java todos os objetos são passados por referência ( Para
passar o valor, deve se utilizar o método clone() de java.lang)... > Os tipos básicos são passados por valor, mesmo vetores de tipos
básicos passam seu valor e não sua referência !!!.... > Até mais !!!! > -----Mensagem original----- > De: Carlos Eduardo Carvalho [mailto:[EMAIL PROTECTED]] > Enviada em: terça-feira, 5 de novembro de 2002 08:29 > Para: [EMAIL PROTECTED] > Assunto: Re: [java-list] Duvida sobre atribuicao de objetos... > Jonatan, > > Essa é uma afirmação perigosa de ser feita. Não sei se a passagem
de parâmetros em Java seria exatamente por valor, ao invés de por referência.
Nesse mesmo exemplo que você citou na mensagem abaixo, pode ser simulada uma
situação onde fica clara essa contradição. > > Vamos supor que tenhamos dois métodos, executar() e
metodoAtribuicao(), como seguem abaixo. > > public void executar() { > MeuBean a = new
MeuBean(); > MeuBean b = new
MeuBean(); > > a.setNome("Teste
Atribuicao"); > > metodoAtribuicao(a, b); > >
System.out.println("Bean A: "+a.getNome()); // A impressão na
console da >
System.out.println("Bean B: "+b.getNome()); // aplicação terá
o mesmo valor > } > > public void metodoAtribuicao(MeuBean a, MeuBean b) { > b.setNome(a.getNome()); > } > > A partir desta justificativa creio que seja mais correto dizer que
a passagem de parâmetros de objetos em métodos seja por referência, enquanto
que a passagem de parâmetros de tipos básicos do java em métodos seja por
valor. É uma questão meio confusa de se afirmar, mas se estiver errado,
corrijam-me! > > Falou! > > Carlos Eduardo Teixeira Carvalho > Analista de Sistemas - Fábrica de Software > Unitech Tecnologia de Informação > ----- Original Message ----- > From: Jonatan Schroeder <mailto:[EMAIL PROTECTED]> > To: [EMAIL PROTECTED] ; Sr.
<mailto:[EMAIL PROTECTED]>
Apocalipse > Sent: Monday, November 04, 2002 7:09 PM > Subject: Re: [java-list] Duvida sobre atribuicao de objetos... > > A passagem de parâmetros em java é por valor, e não por
referência. Então, > > public void metodo_atribuicao(Object a, Object b) { > a = b; > } > não tem efeito algum. O objeto 'a' é passado ao método, mas quando
você faz a atribuição, você está fazendo com que o parâmetro a seja alterado,
ou seja, ele deixa de apontar para o local em que foi definido na chamada do
método e passa a apontar para o local do objeto b. > > --- > Jonatan Schroeder > [EMAIL PROTECTED] > > > ----- Original Message ----- > From: Sr. Apocalipse
<mailto:[EMAIL PROTECTED]>
> To: [EMAIL PROTECTED] ; [EMAIL PROTECTED] > Sent: Monday, November 04, 2002 2:22 PM > Subject: [java-list] Duvida sobre atribuicao de objetos... > > Galera, > Eu gostaria que alguém me esclarecesse o seguinte ocorrido. > Eu queria fazer uma atribuicao de dois objetos dentro de um metodo
e nao > consegui, quando retorna do metodo a atribuicao é desfeita. Fora
do metodo a > atribuicao ocorre e um "aponta" para o outro. > O exemplo está abaixo: > > public void teste(){ > > Object a, b; > > a = new Vector(); > b = new Date(); > > metodo_atribuicao(a, b); > // Apos o
metodo_atribuicao, o objeto a nao esta "apontando" para o > objeto b > // ou seja, o objeto a
continua como Vector e o objeto b como Date. > > a = b; > // Agora sim o objeto a
"aponta" para o objeto b > // ou seja, o objeto a
agora é Date e o objeto b tambem > } > > public void metodo_atribuicao(Object a, Object b) { > a = b; > } > >
_______________________________________________________________________ > Yahoo! GeoCities > Tudo para criar o seu site: ferramentas fáceis de usar, espaço de
sobra e acessórios. > http://br.geocities.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] > ------------------------------------------------------------------------- > ------------------------------ 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: [java-list] Duvida sobre atribuicao de objet... Gangrel
- Re: [java-list] Duvida sobre atribuicao de ... Jonatan Schroeder
- Re: [java-list] Duvida sobre atribuicao de ... Samuel Yuen
- RE: [java-list] Duvida sobre atribuicao de objet... Denard Costa Soares
- RE: [java-list] Duvida sobre atribuicao de ... Henrique Viecili
- Re: [java-list] Duvida sobre atribuicao... Adriano Andrulis
- Re: [java-list] Duvida sobre atribu... Hélio Brandão
- RE: [java-list] Duvida sobre atribuicao de objet... Edson Barbosa
- Re: [java-list] Duvida sobre atribuicao de ... Carlos Eduardo Carvalho
- RES: [java-list] Duvida sobre atribuica... Mário Roberto Porto Filho
- Denard Costa Soares