Acho que voce nao prestou BEM atencao no exemplo.
Eu estava efetivamente mudando a REFERENCIA para outra
String, e nao usando algum metodo que modifique seu
estado interior. Que cairia na estoria das classes
imutaveis

Mudando para uma classe mutável, exemplo StringBuffer
veja o método:

public void mudaStringBuffer(StringBuffer b) {
   b.append("mais texto");
}

E claro que as mudanças refletirao no parametro depois
que o metodo terminar.

mas se o metodo fosse

public void mudaStringBuffer(StringBuffer b) {
   b = new StringBuffer("mais texto");
}

As mudanças nao refletiriam.

Nao tem nada a ver a estoria de objeto mutavel e
imutavel, o que interessa eh que as referencias sao
passadas por valor. Os objetos sao passados por
referencia. 

Eu estava tentando mostrar o obvio! 

Ricardo Munhoz Santiago

--- "Sergio Oliveira Jr." <[EMAIL PROTECTED]> wrote:
> Ricardo,
> 
> O objeto string não vale porque é uma classe
> IMUTÁVEL. Não há como trocar o 
> valor da String sem criar outro objeto, ou seja, sem
> criar outra referencia 
> !!!!!!
> 
> Classes Imutáveis são muito interessantes porque são
> THREAD-SAFE, evitando 
> condições de corridas e bugs intermitentes. Classes
> mutáveis são perigosas e 
> podem introduzir brechas de segurança no seu código,
> principalmente se você 
> estiver escrevendo uma API para um outro programador
> utilizar. (Alguém aí 
> ainda tem a documentação do Java 1.0 ??? Acho que a
> classe String no começo 
> era Mutável e só depois a Sun percebeu que isso não
> era bom e transformou 
> ela em Imutável. Mas não tenho certeza disso.)
> 
> Se eu tenho um objeto MUTÁVEL como um Vetor por
> exemplo, eu posso 
> modificá-lo dentro da função sem problemas.
> 
> Não é muito difícil construir uma String Mutável e
> aí eu poderia fazer um 
> Swap(s1, s2) pagando o preço de ter que instanciar
> duas novas Strings. O 
> Sven foi muito feliz levantando essa bola do
> Swap(&a,&b) e acabou me 
> deixando com a seguinte dúvida:
> 
> Em C++ dá para fazer um Swap de Objetos Imutáveis
> ??? Se dá gostaria de 
> entender como o C++ faz isso, isto é, o que acontece
> por trás do pano.
> 
> ------------------------------
> Sergio Oliveira Jr.
> Sun Certified Java Programmer
> Desenvolvedor e Consultor Java
> Empresa SmartJava
> ------------------------------
> 
> 
> 
> >From: Ricardo Santiago <[EMAIL PROTECTED]>
> >Reply-To: [EMAIL PROTECTED]
> >To: [EMAIL PROTECTED]
> >Subject: RE: [java-list] Re: Artigo Java x C#
> >Date: Wed, 3 Oct 2001 09:16:54 -0700 (PDT)
> >
> >
> >Cara, vamos deixar claro:
> >Tudo em java é passado por valor.
> >MAS, você só mantém REFERENCIAS para objetos (ou
> >pointeiros se achar melhor).
> >Logo, todo objeto é passado por referencia visto
> que a
> >referencia é que é passada por valor!
> >
> >Isso não implica de forma alguma em perda de
> >performance, simplesmente significa que qq váriavel
> >que você passar como paramêtro, se for modificada
> >dentro do método invocado,não refletirá as mudanças
> >quando o método retornar
> >
> >Como em:
> >
> >String s = "test";
> >int i = 1;
> >
> >mudeOsValores(s, i);
> >
> >System.out.println(s + 1); // == "test1"
> >
> >Onde o metodo mudeOsValores contem o seguinte
> codigo
> >
> >public void mudeOsValores(String s, int i) {
> >   s = "outracoisa";
> >   i = 2;
> >}
> >
> >Ricardo Munhoz Santiago
> >--- [EMAIL PROTECTED] wrote:
> > > 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
> > >
> > > -----Original Message-----
> > > From: Sergio Oliveira Jr.
> > > [mailto:[EMAIL PROTECTED]]
> > > Sent: terça-feira, 2 de outubro de 2001 22:56
> > > To: [EMAIL PROTECTED]
> > > Cc: [EMAIL PROTECTED];
> > > [EMAIL PROTECTED]
> > > Subject: [java-list] Re: Artigo Java x C#
> > >
> > > Mauro,
> > >
> > > Não era a minha intensão te tirar do sério. Não
> vejo
> > > problema algum em me
> > > engajar num papo com você face-to-face. Só estou
> > > conversando com você via
> > > email por ser mais conveniente, afinal a
> tecnologia
> > > está aí para facilitar a
> > >
> > > nossa vida, certo?
> > >
> > > Vou continuar falando racionalmente, apesar de
> não
> > > ver nenhum problema em te
> > >
> > > encontrar para um papo mais descontraído.
> > >
> > > Alguns absurdos que vc escreveu:
> > >
> > > - Java não possui todos os tipos derivados de
> > > ancestral comum:
> > >
> > > Possui sim... Além de possuir tipos primitivos
> mais
> > > leves, que por sua vez
> > > possuem suas classes equivalentes (Wrappers).
> Todas
> > > são derivadas da class
> > > Object.
> > >
> > > - Java não possui Structs:
> > >
> > > Realmente não possui a palavra Structs, mas é
> > > ridículo simular um C Struct
> > > com uma class ou inner class.
> > >
> > > - Java não pode passar parametros por
> referencia:
> > >
> > > Todos os objetos Java são passados por
> referencia.
> > > Qualquer principiante em
> > > Java precisa saber disso.
> > >
> > > - Java não possui Propriedades:
> > >
> > > Já ouviu falar em JavaBeans ??? Tb existe uma
> classe
> > > Properties que faz isso
> > >
> > > facilmente.
> > >
> > > - Java categoricamente não possui eventos nem
> > > delegate:
> > >
> > > Toda a GUI do Java é orientada a eventos e a
> > > listeners.
> > > Java não possui ponteiros para funções, mas
> possui
> > > interfaces que podem
> > > facilmente e de uma forma mais elegante e
> poderosa
> > > realizar callbacks.
> > >
> > > - Java não possui Atributos:
> > >
> > > Não sei o que vc quiz dizer com isso, mas Java
> > > possui uma API de Reflection
> > > poderosíssima.
> > >
> > > - Java não possui Ponteiros:
> > >
> 
=== 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