Objetos sao sempre passados por referencia no mesmo virtual machine!!!

O exemplo do StringBuffer embaixo prova isso. A variavel foi declarada,
alterada num outro metodo e o conteudo dele mudou no primeiro metodo. Se
fosse por valor uma copia do StringBuffer ia ser criada, alterada no
outro metodo, e no primeiro metodo o conteudo nao seria alterada.

Pois, tem objetos que funcionam diferentes. Passar um String por
referencia nao faz sentido por que nao e mutavel. Por exemplo, ao
concatenar um String com outro o primeiro nao e alterada, mais sim um
terceiro String e criado.

String str = "a";

str += "b"; // cria um String novo na memoria, use StringBuffer para
ganhar performance quando voce vai concatenar um String varias vezes.

-- 
======================================
Karl Silva Lovgren
Binary Evolution
Sao Paulo - Brazil
[EMAIL PROTECTED]
http://www.binaryevolution.hpg.com.br


On Wed, 2003-05-14 at 18:57, Alexandro Strack wrote:
> Oi Rodrigo,
> 
>    Não concordo com você. O que acontece na verdade é que a classe
> StringBuffer é mutável (diferente de String que é não mutável) e logo o que
> se passa é que o método append está alterando o valor de uma
> propriedade(variável) interna da classe StringBuffer. Essa propriedade
> armazena o valor. Para você ter a certeza do que estou falando mude de
> StringBuffer para String e substitua o append por += . Você verá que
> imprimirá JAVA.
> 
>     Para ir mais além mude todo o seu exemplo para trabalhar não com um
> StringBuffer mas com um Integer. Verá que também não funcionará pois a
> classe Integer é não mutável.
> 
>     Em resumo: a passagem de parâmetro é sempre por valor.
> 
> Um abraço,
> 
> Alexandro Strack
> ----- Original Message -----
> From: "Rodrigo" <[EMAIL PROTECTED]>
> To: <[EMAIL PROTECTED]>
> Sent: Saturday, May 10, 2003 7:16 PM
> Subject: Re: [java-list] Pergunta for Dummies
> 
> 
> > hehehe, o exemplo não foi, agora sim:
> >
> > ---
> > public class Teste {
> >
> >  public static void main(String[] args) {
> >   StringBuffer s = new StringBuffer( " Java" );
> >   teste( s );
> >   System.out.println( s );
> >  }
> >  public static void teste( StringBuffer s ) {
> >   s.append( " é bala" );
> >  }
> > }
> > ----
> > A saída será "Java é bala" o q no meu ver significa que a passagem foi por
> > referência já que alterei o meu objeto que passei por parâmetro...
> >
> > Fallow
> > ----- Original Message -----
> > From: "Rodrigo" <[EMAIL PROTECTED]>
> > To: <[EMAIL PROTECTED]>
> > Sent: Saturday, May 10, 2003 7:14 PM
> > Subject: Re: [java-list] Pergunta for Dummies
> >
> >
> > > Eu sou suspeito a falar, mas pelo que sei toda a passagem de objetos em
> > java
> > > é por referência, já as passagens de tipos básicos serão sempre por
> > valor...
> > >
> > > Desculpe-me se estiver errado...
> > >
> > > Segue um exemplo:
> > >
> > > ----- Original Message -----
> > > From: "José Voss Junior" <[EMAIL PROTECTED]>
> > > To: <[EMAIL PROTECTED]>
> > > Sent: Wednesday, May 07, 2003 9:21 PM
> > > Subject: Re: [java-list] Pergunta for Dummies
> > >
> > >
> > > Correção, Passagem de Parametro em Java é somente por Valor!!!!!
> > > ----- Original Message -----
> > > From: Ricardo Jun Taniguchi <[EMAIL PROTECTED]>
> > > To: <[EMAIL PROTECTED]>
> > > Sent: Friday, May 02, 2003 5:36 PM
> > > Subject: RE: [java-list] Pergunta for Dummies
> > >
> > >
> > > Lembrando-se de que os parâmetros são passados por referência em Java,
> > temos
> > > que:
> > >
> > > new Boolean(true) à esquerda = objeto A instanciado com o parâmetro
> true;
> > > new Boolean(true) à direita = objeto B instanciado com o parâmetro true;
> > >
> > > Como a comparação == é feita por meio da verificação dos endereços dos
> > > objetos e não pelo seu conteudo, naturalmente essa comparação daria
> false.
> > >
> > > Agora, se quiser que seja true, temos que fazer:
> > >
> > > if (new Boolean(true).equals(new Boolean(true)))
> > >
> > >
> > > -----Original Message-----
> > > From: Nelson [mailto:[EMAIL PROTECTED]
> > > Sent: Tue 29-Apr-03 16:35
> > > To: SouJava
> > > Cc:
> > > Subject: [java-list] Pergunta for Dummies
> > > Alguém pode me dizer, porque o código abaixo, imprime "false" ?
> > >
> > > class teste {
> > >
> > > public static void main(String[] args) {
> > >
> > > if (new Boolean(true) == new Boolean(true)) {
> > >    System.out.println("true");
> > >  } else  {
> > >     System.out.println("false");
> > >   }
> > >  }
> > > }
> > >
> > >
> > >
> > >
> > >
> >
> > --------------------------------------------------------------------------
> > --
> > > ----
> > >
> > >
> > > ------------------------------ 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
> > > historico: http://www.mail-archive.com/java-list%40soujava.org.br
> > > 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
> > > historico: http://www.mail-archive.com/java-list%40soujava.org.br
> > > 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
> > historico: http://www.mail-archive.com/java-list%40soujava.org.br
> > 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
> historico: http://www.mail-archive.com/java-list%40soujava.org.br
> 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
historico: http://www.mail-archive.com/java-list%40soujava.org.br
para sair da lista: envie email para [EMAIL PROTECTED] 
-------------------------------------------------------------------------

Responder a