Senhres, 

  Resolvi dar meu testemunho nessa quest�o visando
  contribuir para o seu esclarecimento, 
  visto que a mesma j� povoou essa lista por diversas 
  vezes.
  Meu objetivo n�o � tomar partido e sim 
  participar - espero com sucesso.
  Aqueles que discordarem por favor n�o se sintam
  ofendidos, pois como j� coloquei acima, estou apenas
  dando meu testemunho.
  O que ser� exposto abaixo
  j� foi empregado em v�rios projetos com sucesso.

  Em java a passagem de objetos como parametros
  ocorre por refer�ncia. Seria muito pesado o 
  processamento de replicar objetos que s�o compostos
  de outros objetos que por sua vez podem ser 
  compostos por outros e assim sucessivamente.
  (Fato que ocorre muito em nossos projetos)

  AGORA!!! Existem objetos que
  devido a sua arquitetura interna n�o permitem
  que seu valor seja alterado. Fazem parte
  desses objetos: String, Integer, Long, ...
  por exemplo.
  Ap�s instanciarmos uma String n�o mais poderemos
  mudar seu valor. String n�o tem m�todo setValue() 
  ou setText() ou coisa parecida em sua lista de
  m�todos.

  No c�digo java abaixo:

    String a;
    a = "Hello World";

  O c�digo que o compilador realmente gera �
  
   a = new String("Hello World");

  Entao , em a= "Hello World"
  n�o estamos alterando o valor da
  String , estamos instanciando uma nova String com
  um novo valor.

  Essa particularidade desses objetos "especiais" 
  foram ness�rias por quest�es de performance.

  Quando precisarmos de uma String que tenha seu
  conte�do real alterado, devemos usar a classe
  StringBuffer que permite altera��es de 
  conte�do com uma infinidade de m�todos em sua
  iterface para fazer tal a��o.

  Ent�o, o caso particular STRING 
  ( Como tamb�m algumas poucas outras ) n�o pode
  ser usado como exemplo de como Java passa
  objetos como parametros. Pois, procedendo
  assim estamos usando
  casos particulares para serem a regra natural.

  Apenas para ilustar o que foi dito acima 
  fa�am testes com um objeto do tipo Date por
  exemplo.

  C�digo do Exemplo:

  import java.util.*;
import javax.swing.*;

public class PassagemParametro  {

    public PassagemParametro() {


    }

    public static void main(String[] args) {
        String s = "Hello";
        System.out.println(s + " - Valor inicial de
s.");
        tentaAlterarString(s);
        System.out.println(s + " - Oh! n�o consegui
alterar s.");

        Date d = new Date(0);
        System.out.println(d + " - Valor inicial de
d.");
        alteraData(d);
        System.out.println(d + " - CONSEGUI!!!!
Alterei d.");
    }

    public static String tentaAlterarString(String s)
{
        s = "Alo";
        return s;
    }

    public static Date alteraData(Date d) {
        d.setTime(100000000);
        return d;
    }
}
  

Atenciosamente,


H�lio

 --- Adriano Andrulis <[EMAIL PROTECTED]> escreveu:
> Pior � que ele n�o t�. Mesmo em objetos, s�o
> passadas c�pias das refer�ncias
> aos objetos. O que � permitido � usar a copia para
> alterar atributos do
> objeto ou executar seus m�todos.
> Se por acaso voce alterar o valor da variavel do
> metodo local, a variavel
> original continua com o mesmo valor.
> 
> Da uma olhada no seguinte c�digo:
> 
> public class Copia {
>     public String teste;
>     public Copia(String str) {
>          teste = str;
>      }
> }
> 
> public class TestaCopia {
>     public static void main(String[] args) {
>         Copia cp = new Copia("x") ;
>         mudarRef(cp); //se fosse passagem por
> referencia, aqui ele mudaria a
> referencia
>         System.out.println(cp.teste); //se fosse por
> referencia imprimiria
> "y"
>     }
>     public void mudarRef(Copia copia) {
>         copia = new Copia("y");
>     }
> 
> }
> 
> Espero n�o ter complicado mais.
> 
> Abra�os,
> Adriano Andrulis
> 
> 
> ----- Original Message -----
> From: "Henrique Viecili" <[EMAIL PROTECTED]>
> To: <[EMAIL PROTECTED]>
> Sent: Monday, November 11, 2002 3:36 PM
> 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:mario@;cmagnani.com.br]
> > 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:carlosetc@;unitech.com.br]
> > 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:jona.s@;uol.com.br>
> > To: [EMAIL PROTECTED] ; Sr.
> <mailto:sr_apocalipse@;yahoo.com.br>
> 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:sr_apocalipse@;yahoo.com.br>
> > 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;
> 
=== message truncated === 

_______________________________________________________________________
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