Em C � feita de forma expl�cita esta passagem........
Refer�ncia em C � um endere�o de mem�ria que guarda o ponteiro para a �rea de mem�ria da vari�vel.....Desta forma se voc� atribuir um outro ponteiro
para este endere�o de mem�ria, aquela refer�ncia inicial foi perdida e voc� n�o recupera mais. Em Java isso n�o acontece pois � passado uma c�pia
da refer�ncia, o original fica protegido.
 
Resumo
Em C se passa a refer�ncia expl�cita, mudou a refer�ncia perdeu a refer�ncia original....
Em Java se passa uma c�pia da refer�ncia , mudou a refer�ncia, sem problemas, o original est� mantido.....(� por isso que Java n�o trabalha com ponteiro !!)
 
Obs: Pelo que vimos na discuss�o a Sun quer deixar claro que tudo em Java � passado por valor........Para tipos primitivos uma c�pia da vari�vel e para classes
� passado uma c�pia da refer�ncia, o que � sensato, pois imagine o desperd�cio de mem�ria que seria se toda chamada com par�metros a VM alocasse
mem�ria para o novo objeto...
 
M�rio
 
Obs: C tamb�m possui passagem por valor...
Ex de declara��es de fun��es em C
void minhaFunc(int x);    // Por valor
void minhaFunc(int *x);  // Por refer�ncia expl�cita
-----Mensagem original-----
De: Carlos Eduardo Carvalho [mailto:[EMAIL PROTECTED]]
Enviada em: segunda-feira, 11 de novembro de 2002 09:52
Para: [EMAIL PROTECTED]
Assunto: Re: [java-list] Duvida sobre atribuicao de objetos...

Edson,
 
Agora, acho que o assunto foi bem mais esclarecido. Quando voc� passa um objeto como par�metro, est� passando o valor de sua refer�ncia e n�o "a refer�ncia da refer�ncia", o que seria a refer�ncia da vari�vel passada como par�metro, mais ou menos isso, n�? � semelhante a C, sim, mas em C essa passagem � tamb�m por valor, n�o?
 
 
Carlos Eduardo Teixeira Carvalho
Analista de Sistemas - F�brica de Software
Unitech Tecnologia de Informa��o
http://www.unitech.com.br
----- Original Message -----
Sent: Wednesday, November 06, 2002 8:19 PM
Subject: RE: [java-list] Duvida sobre atribuicao de objetos...

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

Responder a