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