Existe passagem de parâmetros por referência?

E aí pessoal,blz?!!!

Em java, existe passagem de parâmetro por referencia?

Desde já agradeço.

T+

Até onde sei Java utiliza a passagem de parâmetros por valor.
Você pode conseguir isso declarando seu atributo como estático, ele será passado por valor, mas o funcionamento será como que por referência.

Mas se você fizer isso:

void meuMetodo( Pessoa p ) {
     p.setNome( "lipe lindo" );
}

Pessoa p = new Pessoa( "lipe" );
System.out.println( p.getNome() ); // imprime lipe
meuMetodo( p );
System.out.println( p.getNome() ); // imprime 'lipe lindo'

Existe.Mas não em Java. :wink:
http://www.guj.com.br/posts/list/19722.java

[quote=LIPE]
Mas se você fizer isso:

[code]
void meuMetodo( Pessoa p ) {
p.setNome( “lipe lindo” );
}

Pessoa p = new Pessoa( “lipe” );
System.out.println( p.getNome() ); // imprime lipe
meuMetodo( p );
System.out.println( p.getNome() ); // imprime ‘lipe lindo’
[/code][/quote]

MAs de qualquer forma num vai continuar passando por valor? Só que o valor da variável pessoa é a referência.

Até onde eu sei:

No java absolutamente todos os parametros os parametros são passados por valor, ou seja, o valor da variavel passada como parametro é copiado para o valor da variavel que está recebendo o parametro.

:arrow: Quando é passada uma variavel do tipo primitiva, o valor dela é copiado para a variavel que está recebendo, alterando a que recebeu, não interfere na que passou
:arrow: Quando é passada uma variável do tipo Objeto, o valor dela é IGUALMENTE copiado para a variavel que está recebendo, só que nesse caso o valor dela é uma referencia a um objeto, e podemos ter a impressão de estar passando a variavel por referencia, mas ainda é por valor. Nesse caso alterando o valor da variável que está recebendo também não interefere na variavel que passou o valor, mas alterando o Objeto que está sendo referenciado, então as duas variáveis sofrem com a alteração.

[quote=LIPE]Mas se você fizer isso:

[code]
void meuMetodo( Pessoa p ) {
p.setNome( “lipe lindo” );
}

Pessoa p = new Pessoa( “lipe” );
System.out.println( p.getNome() ); // imprime lipe
meuMetodo( p );
System.out.println( p.getNome() ); // imprime ‘lipe lindo’
[/code][/quote]

Continua sendo passagem por valor, pois a referência de p (por exemplo lipe@8345) não mudou.

Para verificar isso basta rodar essa versão alterada:

void meuMetodo( Pessoa p ) {
     p.setNome( "lipe lindo" );
}

Pessoa p = new Pessoa( "lipe" );
System.out.println( "referencia de p = "+p ); // imprime referencia
System.out.println( p.getNome() ); // imprime lipe
meuMetodo( p );
System.out.println( p.getNome() ); // imprime 'lipe lindo'
System.out.println( "referencia de p = "+p ); // imprime referencia

Olá

Java não é C e passa parâmetros por valor. Porém, quem está começando precisa entender o seguinte exemplo:

. . .
   void changeReference(java.awt.Point p) {
      p.x++;
      p.y++;
   }

. . .
   // Dentro de algum método
   java.awt.Point m = new java.awt.Point(0.0, 0.0)
   changeReference(m);
   System.out.println(m.x);
. . .

O que será impresso?

O mesmo se passa com Arrays. Objetos e arrays são reference types cuja referência é passada por valor. Mas seu conteúdo pode ser modificado dentro de métodos.

Editado: não tinha visto que já tinham respondido a mesma coisa.

[]s
Luca

Ô pessoal pinel :smiley: onde eu falei que no meu exemplo era por referência?

Eu já li textos sobre RMI onde se diz passar objetos por referência ???

Márcio

[quote=marcioa1]Eu já li textos sobre RMI onde se diz passar objetos por referência ???

Márcio[/quote]

Definitivamente e indiscutivelmente parametros em java são apenas exclusivamente por valor.

Acontece que em CORBA (o que sei é em corba) são criados e´spécies de wrapper que carregam valores de retorno

Por exemplo: se vc criar um método que recebe uma variável String por referencia digamos em powerbuilder, quando vc gerar o stub disso, terá um objeto do tipo org.omg.CORBA.StringHolder. Internamente, não tenho a documentação pra explicar como, mas é feita uma “mágica” onde esse objeto recebe o valor da variavel de referencia.

Alguem que tenha mais autoridade nisso por favor me corrija ou complemete.

Vi a ionformação de passagem por parêmetro em um livro de RMI sem CORBA. Provavelmente o autor estava enganado, e não é o único. Se encontrar o livro eu posto aqui.

Abraços,

Márcio

Marcio, acho q vc viu no Mastering EJB 3rd Ed, na pagina 655.

Não existe… é simples de se testar =p

public static void main( String [] args ) {

   Object o = new String( "aaa" );
   f( o );
   System.out.println( o.toString() ); // ja aviso q a saida será "aaa"...
}

public static void f( Object o ) {

   o = new String( "bbb" );
}

De qualquer forma, nao deem muita bola pra essa historia - passagem por referencia, em Java, se existir, seja no RMI, CORBA ou em algum outro canto nojento da JDK, eh uma macumba tao grande, suja e fedida que era melhor ter ficado sem a valiosa (?) informacao :slight_smile:

Apoiado

Taí… Fechou.