Passagem de parâmetro por referência

16 respostas
T

vcs concordam se eu disser q em Java n existe passagem de parametros por referência?

16 Respostas

_

Olá, bem vindo.

http://www.guj.com.br/posts/list/24894.java
http://www.guj.com.br/posts/list/19722.java

W

JAVA tem passagem de parâmetros por valor e por referencia.

M

Concordo com th13fp45s.

No livro de certificaçao da Kaatie Sierra e do Bates eles afirmam isto categoricamente ! O que se passa é uma cópia do enddreço do objeto, que pode ter seu conteúdo alterado pelo método.

Você pode nos dizer seu nome ?

Márcio

T

oi, meu nome eh Alexandre Muzzio, no livro Core Java tbm isso eh afirmado categoricamente, e eu concordo, pois eh criado uma nova referencia para o objeto, q essa nova referencia pode mudar o estado atual do objeto, mas no fim do metodo, ela deixa de existir…

M

Alexandre,

Já li num livro sobre RMI que há passagem por referência, mas acho estranho. Vou procurar este livro e procurar saber se o autor não está falando besteira,

Abraços,

Márcio

T

tem q ver… mas ficaria meio estranho em um local existir passagem por referencia e em outro na mesma linguagem n existir…

F

os cara fala que nao existe passagem por referencia mas se isso aqui nao é por referencia entao nao sei mais o que é passagem por referencia:

public class Classe1{
   int valor;
   String nome;
   public Classe1(){
      valor = 0;
      nome = "ninguem";
   }
}


public class Classe2{

   public Classe2(){
     Classe1 c = new Classe1();
     System.out.println(c.nome + " , " + c.valor);
     altera(c);  //por referencia
     System.out.println(c.nome + " , " + c.valor);
   }

   public void altera(Classe1 newC){
      newC.valor = 100;
      newC.nome = "Isso é referencia";
   }

   public static void main(String args[]){
      new Classe2();
   }
}
J

marcioa1:
Alexandre,

Já li num livro sobre RMI que há passagem por referência, mas acho estranho. Vou procurar este livro e procurar saber se o autor não está falando besteira,

Abraços,

Márcio

Eu sempre soube que so existe passagem por valor, nunca por referencia.
Ja dei uma pesquisada e não achei nada ao contrario. Nos cursos que dou, garanto p/ alunos que é por valor… :mrgreen: , tomara que não decubra agora que falei besteira… :mrgreen:

F

ta, ta, ta, li os topicos que o LIPE passou e todos realmente dizem que nao existe passagem por referencia!! mas entao me expliquem o exemplo que dei ai em cima!!! pq que qual é a logica de “passagem por referencia”? creio que seja, vc passar a variavel(objeto) para um metodo, fazer alterações dentro do metodo e quando voltar a variavel(objeto) estar alterada!! que eu saiba essa é a teoria de “passagem por referencia” mas entao como o objeto do exemplo ai de cima assumiu outros valores?? e onde estao os valores antigos dele???

F

galera acho que to pirando com esse negocio de passagem por valor e por referencia em java???

Por favor definam Passagem de parametro por Referencia e passagem de parametro por Valor???

quando fiz faculdade e tava aprendendo Delphi era muito simples:

Por Referencia: passo a variavel “a” para o metodo x, faço alterações e quando volto “a” esta com o valor(conteudo) alterado( diferente.)

Por Valor: passo a variavel “a” para o metodo x, faco alterações e quando volto “a” nao sofreu alterações.

e levando essa definição em consideração, é exatamente o que acontece no exemplo que dei ai em cima!!!

M

fred,

Quando você passa o objeto c nos parâmetros, na verdade está passando uma copia da variável que tem como o endereço o mesmo do objeto c. O método que recebe, recebe uma variável, diferente da variável do método “chamador” , mas com o mesmo endereço de memória, ou seja uma cópia do endereço no qual o objeto está guardado. Ao alterar uma propriedade desta nova referência, você está alterando o endereço de memória, que é o mesmo da primeira variável. Sacou?

Márcio

F

saquei!!! e essa é a “logica” de passagem por referencia certo!!! pode até ser que o java passa uma “cópia”, mas a “lógica” de funcionamento é de “referencia”, correto??

A

Caros no livro de certificação da Kathy Sierra na página 118 explica sobre a passagem de referencia, que na verdade usa a semantica de passagem por valor. O Exemplo abaixo imprime o endereço do objeto.

class Test {
	int i[] = { 0 };

	public static void main(String args[]) {
		int i[] = { 1 };
		System.out.println("obj i1:" + i);
		change_i(i);
		System.out.println("obj i4:" + i);
		System.out.println(i[0]);
	}

	public static void change_i(int i[]) {
		System.out.println("obj i2:" + i);
		System.out.println("II:" + i[0]);
		int j[] = { 2 };
		i[0] = 40;
		i = j;
		System.out.println("obj i3:" + i);
		System.out.println("I: " + i[0]);
		System.out.println("J: " + j[0]);
	}
}

Neste código o resultado retornado será o seguinte:
obj i1:[I@3e25a5
obj i2:[I@3e25a5
II:1
obj i3:[I@19821f
I: 2
J: 2
obj i4:[I@3e25a5
40

C

Olha o livro Logica de programação e estruturas de dados com aplicações em Java de Sandra Puga e Gerson Rissetti, e também desde de 2001 que aprendo Java existe sim passagem de parâmetros por valor e passagem de parâmetros por referência, se alguém estiver ensinando que só existe o primeiro espero que dê uma olhadinha neste livro.

G

O penúltimo teste foi invalido, pois Strings são imutáveis.

M

Sim, funciona como a lógica de referência, mas no baixo nível, java sempre vai copiar o parâmetro antes de passá-lo para um método. Na verdade, existe um tipo de variável em java que não é manipulável pelo programador, o chamado reference. Este é o tipo que serve de apontador para o objeto, ou seja, todo objeto em java é apontado por uma variével do tipo reference. O java então cria uma cópia deste variável (reference) antes de invocar um método.

Criado 5 de agosto de 2005
Ultima resposta 8 de ago. de 2005
Respostas 16
Participantes 10