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'
[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 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
Apoiado
Taí… Fechou.