Página 328 do livro Thinking in Java, do Bruce Eckel:

 

Na seção "pass by value" ele discute com mais detalhes essa questão, apesar de desde o começo do capítulo ele dar a entender que existe passagem por referência.

Ele coloca dois pontos de vista.

No primeiro, ele afirma: "Java passes everything by value".

No segundo, ele diz: "Java passes primitives by value(no argument there) but objects are passed by reference". Mais adiante, no mesmo parágrafo, ele diz: "Since ou don´t get a local copy of the object when you pass it into a method, objects are clearly not passed by value"

 

Leiam com atenção essa seção e verão o que digo abaixo.

 

Se vcs lerem com bastante atenção, ele fala de um handle. Esse handle é o endereço para o objeto, o que ele,logo na primeira página do capítulo, também chama de safety pointer(ponteiros seguros).

O que acontece em Java é que não há como passar o objeto como parâmetro, e sim o handle dele. Quando o método recebe o handle, é criada uma cópia do handle, mas o objeto continua quietinho, não é criada uma cópia dele. Nesse momento, existem dois handles apontando para o mesmo objeto. Isso gera um comportamento similar à passagem por referência, porque utilizando um ou outro, o estado do objeto vai ser alterado.

 

De uma vez por todas: NÃO EXISTE PASSAGEM POR REFERÊNCIA EM JAVA!!!!!

O comportamento é muito similar, mas é por valor.

 

Abraços,

Denard

 

 

-----Original Message-----
From: Marcos Guedes [mailto:[EMAIL PROTECTED]]
Sent
: quinta-feira, 4 de outubro de 2001 08:31
To: [EMAIL PROTECTED]
Subject: Re: [java-list] Re: Artigo Java x C#

 

  Bem, sei que não tenho ainda tanta experiência com

Java, mas o que aprendi no Thinking in Java de Bruce

Eckel é exatamente o que o Carlos Chierici falou:

objetos são sempre passados por referência.

 

 

--- Leonardo Souza Mario Bueno <[EMAIL PROTECTED]>

escreveu: > Nain, nain. Java não tem passagem por

referencia nem

> para objetos.

>

> Ex:

>

>     public void inc(Integer i) {

>         i = new Integer(i.intValue()++);

>         System.out.println("i = " + i); // i = 2

>     }

>

>     i = new Integer(1);

>     inc(i);

>     System.out.println("i = " + i); // i = 1

>

> Resultado:

>

> i = 2

> i = 1

>

> Ao chamar inc(i) é passada uma referencia ao objeto

> i por valor.. ou seja,

> mudanças na referencia dentro do metodo não terão

> efeito fora dele..

>

> []'s,

>

> Leonardo.

>

> ----- Original Message -----

> From: "Carlos E O Chierici" <[EMAIL PROTECTED]>

> To: <[EMAIL PROTECTED]>

> Sent: Wednesday, October 03, 2001 1:35 PM

> Subject: Re: [java-list] Re: Artigo Java x C#

>

>

> > A passagem de parametros em Java funciona assim:

> >

> > - P/ objetos: por referencia

> > - P/ primitivos: por valor

> >

> > Veja o exemplo:

> >

> > public class Teste

> > {

> >    public void run()

> >    {

> >       TObj obj = new TObj();

> >       obj .i = 3;

> >       System.out.println(obj.i); // obj.i = 3

> >       NovoInt(obj);

> >       System.out.println(obj.i); // obj.i = 5

> >    }

> >

> >    public void NovoInt(TObj meuObj)

> >    {

> >       meuObj.i = 5;

> >    }

> >

> >    public static void main(String args[])

> >    {

> >       Teste t = new Teste();

> >        t.run();

> >    }

> > }

> >

> > class TObj

> > {

> >    public int i;

> > }

> >

> >

> > []s

> >

> > Carlos E O Chierici

> > [EMAIL PROTECTED]

> >

> > ----- Original Message -----

> >

> > From: <[EMAIL PROTECTED]>

> > To: <[EMAIL PROTECTED]>

> > Sent: Wednesday, October 03, 2001 9:52 AM

> > Subject: RE: [java-list] Re: Artigo Java x C#

> >

> >

> > Sérgio,

> >

> > Eu gostaria de fazer uma pequena correção no seu

> email.

> >

> > Java não possui passagem por referência. Somente

> por valor. Existe uma

> forma

> > de "simular" passagem de parâmetros por

> referência, utilizando os objetos

> ou

> > tipos primitivos armazenados em um array, por

> exemplo. Mas não existe

> > passagem por referência.

> >

> > Antes que o alguém dê pulinhos de alegria, eu

> pergunto: e qual é o

> problema?

> > Alguém por favor, apresente um artigo

> demonstrativo, baseado em testes de

> > performance ou de algum requisito que mostre qual

> é o grandisíssimo

> problema

> > de Java utilizar passagem por valor, e não por

> referência? Mesmo que haja,

> > isso significa que Java é ruim?

> >

> > Abraços,

> > Denard

> >

> >

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

> > para sair da lista: envie email para

> [EMAIL PROTECTED]

> >

>

-------------------------------------------------------------------------

> >

>

>

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

> para sair da lista: envie email para

> [EMAIL PROTECTED]

>

-------------------------------------------------------------------------

> 

 

_______________________________________________________________________________________________

Yahoo! GeoCities

Tenha seu lugar na Web. Construa hoje mesmo sua home page no Yahoo! GeoCities. É fácil e grátis!

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

para sair da lista: envie email para [EMAIL PROTECTED]

-------------------------------------------------------------------------

Responder a