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,

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: Henrique Viecili [mailto:[EMAIL PROTECTED]]
Sent: segunda-feira, 11 de novembro de 2002 16:36
To: [EMAIL PROTECTED]
Subject: RE: [java-list] Duvida sobre atribuicao de objetos...

 

 

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]

-------------------------------------------------------------------------

 

Responder a