Pessoal, antes de mais nada, o "final" na declaração
da classe NÃO A TORNA IMUTAVEL, a torna incapaz de ser
extendida via HERANÇA. Nada ALEM DISSO. O "final" em
uma VARIAVEL é outra estoria ... ai sim a torna
imutavel.

Voltando a discussão de passagem por referencia ou
valor e esclarecendo de uma vez por todas:

Os parametros sempre são passados por VALOR.
Isso significa que é feita uma COPIA da variavel que é
passada no parametro.

Isso significa que passar um parametro tipo int é a
mesma coisa que criar uma NOVA variavel tipo int.

int valor = 10;
int parametro = valor;

Agora se voce mudar a variavel parametro para 20 a
variavel valor nao vai mudar CERTO? 

A mesma coisa para objetos. 

StringBuffer valor = new StringBuffer("test");
StringBuffer parametro = valor;

se voce invocar um metodo na variavel parametro como

parametro.append("maistest");

A mudanca podera ser notada mesmo na variavel valor
CERTO?
Se voce attribuir outro valor a parametro, dai as
mudanças não serão notadas na variavel valor

parametro = new StringBuffer("maistest").

Pra encerrar vai o PORQUE.

As variaveis que contem OBJETOS apenas apontam para
(geralmente)um endereco de memoria onde os dados do
objeto estao armazenados.
Exemplo:

StringBuffer buffer = new StringBuffer("texto");

o que realmente esta guardado em buffer é um numero de
endereco na memoria digamos 1010.
Quando eu crio outra variavel e attribuo o valor de
buffer, ele contera o mesmo endereco de memoria, ou
seja

StringBuffer buffer2 = buffer;

Tanto buffer2 como buffer tem o mesmo valor 1010 de
endereco de memoria. 
Nesta área da memoria sao armazenados os dados do
objeto, por isso quando voce invocar um metodo em
qualquer das duas variaveis que mudar o valor de algum
dado do objeto, a mudanca sera notada pelas duas
variaveis. Pois ambas estao usando a mesma area de
memoria....
Se voce criar outro objeto, ele vivera em outro
endereco de memoria e mudancas em um nao afetarao o
outro, como em

StringBuffer buffer = new StringBuffer("texto");
StringBuffer buffer2 = buffer;
buffer2 = new StringBuffer("mais");

Mudancas em um Objeto NAO afetaram o outro pois
apontam para diferentes areas na memoria.

Esta explicação esta meio simples, mas espero que
ajude quem ainda nao entendeu bem o ponto.

Ricardo Munhoz Santiago


 



--- Gabriel De Munno Francisco
<[EMAIL PROTECTED]> wrote:
> Tudo bem,
> 
> Mas daí você cai no caso da classe imutável já
> explicado num email na 
> lista... O objeto Integer é "public final class
> Integer"
> 
> Por isso, você não pode alterar o valor, somente
> criando um novo objeto...
> 
> Gabriel
> 
> 
> At 20:51 03/10/2001 -0300, Leonardo Bueno wrote:
> >Acho que não.. no meu exemplo o metod inc altera o
> valor da copia local de i
> >ao fazer a atribuição i = new
> Integer(i.intValue()++); ou estou enganado?
> >Novamente: em java, toda a passagem de parametros e
> por valor, inclusive
> >quando usamos objetos como parametros... neste caso
> a referencia e passada
> >por valor.
> >
> >[]'s,
> >
> >Leonardo.
> >----- Original Message -----
> >From: "Gabriel De Munno Francisco"
> <[EMAIL PROTECTED]>
> >To: <[EMAIL PROTECTED]>;
> <[EMAIL PROTECTED]>
> >Cc: "Leonardo Souza Mario Bueno"
> <[EMAIL PROTECTED]>
> >Sent: Wednesday, October 03, 2001 8:27 PM
> >Subject: Re: [java-list] Re: Artigo Java x C#
> >
> >
> >Leornardo,
> >
> >Você está equivocado, no exemplo que você deu, o
> método não está alterando
> >o objeto, está simplesmente imprimindo o resultado
> da chamada do método
> >intValue() incrementado de 1, por isso não houve
> mudança no valor do objeto
> >durante a chamada.
> >
> >Mas em Java, quando você passa um objeto, vc está
> passando uma referência.
> >
> >Gabriel
> >
> >At 17:36 03/10/2001 -0300, Leonardo Souza Mario
> Bueno wrote:
> > >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]
> 
=== message truncated ===


__________________________________________________
Do You Yahoo!?
NEW from Yahoo! GeoCities - quick and easy web site hosting, just $8.95/month.
http://geocities.yahoo.com/ps/info1

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