E aí pessoal,blz?!!!
Em java, existe passagem de parâmetro por referencia?
Desde já agradeço.
T+
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. 
http://www.guj.com.br/posts/list/19722.java
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'
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.
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'
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
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
Eu já li textos sobre RMI onde se diz passar objetos por referência ???Márcio
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 
Apoiado
Taí… Fechou.