onde eu escrevi por parâmetro por favor leiam "Por referência"
 
 
----- Original Message -----
Sent: Friday, May 30, 2003 7:59 AM
Subject: Re: [java-list] Pergunta for Dummies

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

Responder a