|
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


