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