A passagem é sempre por valor. Por parâmetro somente quando vc passa um objeto. Uma String é tratada como
um objeto em Java. Pelo menos é o que diz
livro Java The Complete Reference de Herbert Schildt.
 
Daniel
----- Original Message -----
Sent: Wednesday, May 28, 2003 8:54 AM
Subject: Re: [java-list] Pergunta for Dummies




Discordo, a passagem de parâmetros em Java é SEMPRE por valor, veja abaixo, um
trecho traduzido da página 19 do livro Complete Java 2 Certification Study Guide
(3º edição) que explica esta confusão de conceitos.

    public void metodo1() {
       Label lbl = new Label();
       lbl.setText("testo 1");
       metodo2(lbl);
       System.out.println(lbl.getText());
    }

    public void metodo2(Label arg)    {
       arg.setText("texto 2");
    }

No exemplo acima é criado um objeto da classe Label com uma referência chamada
lbl. Esta referência é passada como parâmetro, o que significa que uma cópia
dela é passada para o método2. Agora temos 2 referências apontando para o mesmo
objeto, o que significa que ambas as chamadas setText irão modificar o mesmo
objeto. É importante notar que a cópia aqui é entre as referências e não entre
objetos. Mais uma vez a passagem de argumentos é por valor mas o valor neste
caso não é uma grandeza numérica mas um endereço.

Paulo Paro.







Fabio Eduardo Thomaz <[EMAIL PROTECTED]> on 21/05/2003 16:57:24

Please respond to [EMAIL PROTECTED]

To:   [EMAIL PROTECTED]
cc:    (bcc: Paulo Roberto Paro/Stefanini)

Subject:  Re: [java-list] Pergunta for Dummies



um exemplo simples de que a passagem de parametros não é sempre por
valor é a passagem de um array...
o que se passa é uma referência...


Ex.:

//-----------------------------------------------------

public class Teste
{
  public static void setArray ( double dArray[] )
  {
     dArray[0] = 10;
     dArray[1] = 20;
  }
  public static void main ( String[] args )
  {
     double dArrayOriginal[] = {0,0};
     System.out.println ( "Array antes da passagem de parâmetro:" );
     System.out.println ( dArrayOriginal[0] + " | " + dArrayOriginal[1] );
     setArray ( dArrayOriginal );
     System.out.println ( "Array depois da passagem de parâmetro:" );
     System.out.println ( dArrayOriginal[0] + " | " + dArrayOriginal[1] );
  }
}

//-----------------------------------------------------


[]'s
Fabio Eduardo Thomaz


Rodrigo escreveu:

>Bem, até onde sei a Classe String não pode ser alterada, logo quando vc
>fizer o += ele irá instanciar uma nova String, logo a referência não será
>mais a mesma. O exemplo que me deste não mudou minha opinião... Ainda
>acredito que quando a passagem for de objetos será por referência e não por
>valor... Se criar uma classe e passá-la como parametro e dentro deste
>método, eu alterar algum valor da mesma isso refletirá no meu objeto... Veja
>exemplo:
>
>public class Teste01 {
>  private int numero;
>  public Teste01(int i) {
>   setNumero( i );
>  }
>
>  public void setNumero( int i ) {
>   numero = i;
>  }
>
>  public int getNumero() {
>   return numero;
>  }
>}
>
>public class Teste {
>
> public static void main(String[] args) {
>  Teste01 t = new Teste01(10);
>  xxx( t );
>  System.out.println( t.getNumero() );
> }
>
> private static void xxx( Teste01 i ) {
>  i.setNumero( 15 );
> }
>}
>
>Veja, passei um objeto como parâmetro e ao setar o valor modificou o estado
>do meu objeto...
>Quanto ao que você disse de o append estar alterando uma propriedade interna
>da classe... Bem, meus objetos são feitos de propriedades e métodos, e se eu
>criasse dois objetos StringBuffer diferentes e passase um deles como
>parâmetro alteraria apenas daquele objeto... Logo, referência...
>
>
>
>----- Original Message -----
>From: "Alexandro Strack" <[EMAIL PROTECTED]>
>To: <[EMAIL PROTECTED]>
>Sent: Wednesday, May 14, 2003 6:57 PM
>Subject: Re: [java-list] Pergunta for Dummies
>
>
>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]
>-------------------------------------------------------------------------
>
>
>


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