Bom, a verdade � que est� todo mundo mais ou menos certo. A coloca��o do Jonatan est� certa, porque no m�todo que ele chamou, com uma atribui��o direta de dois objetos diferentes dentro do corpo do m�todo, n�o tem efeito algum. Ao sair do m�todo, os dois objetos v�o continuar do mesmo jeito. Por�m, se voc� cria um m�todo, e dentro desse m�todo voc� alterar algum atributo do par�metro objeto, ao terminar o m�todo o valor do atributo daquele par�metro ter� sido alterado (conforme exemplo do Carlos). Resumindo, em Java a passagem de par�metros � por REFER�NCIA, exceto para tipos prim�rios (int, boolean, etc...). Arrays de tipos prim�rios s�o passados por refer�ncia tamb�m. A �nica exce��o a essa regra � na tentativa de se alterar o par�metro em si atrav�s de uma opera��o de atribui��o, como no exemplo do Jonatan.

A solu��o para a tentativa do Jonatan � criar um m�todo de atribui��o, para alterar os valores dos atributos entre os objetos. Por exemplo, o m�todo "fill" abaixo far� a tarefa do operador '=':

������� // Classe MeuBean

������� public void fill(MeuBean bean)

������� {

������� �� this.x = bean.getX();

������ �� this.y = bean.getY();

������� ......

������� }

������� a.fill(b);�� // atribui o conte�do de cada um dos atributos de b, para os atributos de a

 

Rosfran Lins Borges

Analista de Sistemas - NSV

[EMAIL PROTECTED]

F�ton� Inform�tica e Servi�os

Fone: (61) 3031 5060 R.: 5037

 

-----Mensagem original-----
De: M�rio Roberto Porto Filho [mailto:[EMAIL PROTECTED]]
Enviada em: quarta-feira, 6 de novembro de 2002 12:23
Para: [EMAIL PROTECTED]
Assunto: 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 -----

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

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

Responder a