Olá amigo Carlos,
 
O amigo(se eu chamar de companheiro vão achar q sou comunista) Jonatan e o exemplo do amigo Bruno Borges enriquecem e sanam a dúvida q Java APENAS faz a passagem através de valores e não por referência !! Quando um objeto é instanciado e passado como argumento por um método, O VALOR do argumento é a referencia para o objeto !!! Esqueça se alguém pensa q vai uma "cópia do objeto" dentro de algum método.
A passagem por valor é até uma forma inteligente de se economizar recursos de memória.
 
Dê só uma lida nesse pequeno trecho aqui, tirado de uma apostila da própria Sun (slide 137 of 506) :
 
Pass-by-Value
• The Java programming language only passes
arguments by value
• When an object instance is passed as an argument to a
method, the value of the argument is a reference to the
object
• The contents of the object can be changed in the called
method, but the object reference is never changed
 
 
Na prática, Bruno Borges peguei seu código e fiz pequenas alterações, saca o código q o amigo Bruno colocou (envio a classe anexo tb) :

import java.util.*;

public class atribuicao { 
 
 public static void main(String[] args) {  
   atribuicao roda = new atribuicao();  
   roda.teste();
 } 
 
 public void teste() {
 
   Object a, b; 
   a = new Vector();
   b = new Date();   
   
   System.out.println("------- 1 parte ----------\n" );
   System.out.println("a eh instancia de Vector? "+ (a instanceof Vector) + "\n" );
   System.out.println("b eh instancia de Date? "+ (b instanceof Date) + "\n" );
       
   metodo_atribuicao(a, b);
 
   a = b;
    
     System.out.println("------- 2 parte ----------\n" );
     System.out.println("a eh instancia de Vector? "+ (a instanceof Vector) + "\n" );
     System.out.println("b eh instancia de Date? "+ (b instanceof Date) + "\n"

 
 public void metodo_atribuicao(Object a, Object b) {
  
   a = b;
  
   System.out.println("------- 3 parte ----------\n" );
   System.out.println("a eh instancia de Vector? "+ (a instanceof Vector) + "\n" );
   System.out.println("b eh instancia de Date? "+ (b instanceof Date) );     
 }
 
}
 
A saída disso aí fica assim :
 
------- 1 parte ----------
a eh instancia de Vector? true
b eh instancia de Date? true
 
------- 3 parte ----------
a eh instancia de Vector? false
b eh instancia de Date? true

------- 2 parte ----------
a eh instancia de Vector? false
b eh instancia de Date? true
 
Bom amigos da lista espero ter ajudado a confund....quero dizer, espero ter ajudado!! (Imagina se cai uma pergunta assim na prova de certificação ??)
 
EmTEMPO : Lembro-me meu GURU (Professor Paulo Tiburcio), comentou uma vez q havia um "jeitinho" para se burlar isso em Java e SIMULAR uma passagem por referência.

Edson CARVAlho
Analista de Tecnologia Web/Wireless
w-Aura

Rua da Assembléia, 100 - 19 Andar
Rio de Janeiro, RJ 20011-000
Tel: +55 21 3806-3355 / Cel: +55 21 9329-0238
[EMAIL PROTECTED]   www.waura.com.br


-----Original Message-----
From: Carlos Eduardo Carvalho [mailto:[EMAIL PROTECTED]]
Sent: Tuesday, November 05, 2002 8:29 AM
To: [EMAIL PROTECTED]
Subject: 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]
-------------------------------------------------------------------------

Attachment: atribuicao.java
Description: Binary data

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