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