public class ObParm
{
 
  public static void main(String argv[])
  {
    ObParm o = new ObParm();
    o.amethod();
  }
 
  public void amethod()
  {
    int i = 99;
// aqui � alocado uma posi��o de mem�ria para "v" apontando para o objeto "ValHold",
// que possui valor "v.i=10"
    ValHold v = new ValHold();
// o valor de "v.i" passa a ser "30"
    v.i=30;
// aqui � passado a refer�ncia de "v"
// ele vai executar o m�todo "another"
    another(v,i);
// aqui ele terminou de executar o m�todo "another"
// aqui ele imprime o "v.i=20" que foi modificado no m�todo "another", lembra?
    System.out.println(v.i);
  }
 
  public void another(ValHold v, int i)
  {
// aqui � alocado uma posi��o de mem�ria para o "v" deste m�todo que eu vou chamar de "v'"
// e "v'" aponta para a mesma posi��o de mem�ria de "v" do m�todo "amethod"
    i=0;
// aqui o valor do "i" de "v'" passa a ser "20" e por consequencia o "i" de "v" tamb�m.
    v.i = 20;
// aqui � alocado uma posi��o de mem�ria para "vh" apontando para o objeto "ValHold",
// que possui valor "vh.i=10"
    ValHold vh = new ValHold();
// aqui "v'" deixa de apontar para a posi��o de mem�ria que "v" aponta e passa a apontar
// para a posi��o de mem�ria que "vh" aponta
// aqui � o ponto decisivo. lembre que "v.i=20", e que "v'" deixou de apontar para a posi��o
// de mem�ria que "v" aponta.
    v = vh;
// aqui ele imprime "v.i=10" porque � o valor do "i" de "vh" e "i=0" porque � o valor da
// vari�vel local que foi definida no in�cio do m�todo.
    System.out.println(v.i+ " "+i);
  }
 
  class ValHold
  {
    public int i = 10;
  }
 
}
 
 
 
-----Mensagem original-----
De: Rogerio Lacerda <[EMAIL PROTECTED]>
Para: Lista Java <[EMAIL PROTECTED]>; Terra <[EMAIL PROTECTED]>; [EMAIL PROTECTED] <[EMAIL PROTECTED]>
Data: quinta-feira, 23 de mar�o de 2000 2:13
Assunto: desafio

compilem e executem essa classe:

vendo pelo codigo a saida logica seria :

10, 0, 30

mas sai :

10, 0, 20


QUAL A EXPLICACAO ???
======================



public class ObParm{

public static void main(String argv[]){
  ObParm o = new ObParm();
  o.amethod();
   }

public void amethod(){
  int i = 99;
  ValHold v = new ValHold();
  v.i=30;
  another(v,i);
  System.out.println(v.i);
}//End of amethod

public void another(ValHold v, int i){
  i=0;
  v.i = 20;
  ValHold vh = new ValHold();
  v = vh;
  System.out.println(v.i+ " "+i);
}//End of another

class ValHold{
public int i = 10;
}

}



* Para n�o receber mais e-mails desta lista envie um e-mail para [[EMAIL PROTECTED]]
e no corpo do email escreva [unsubscribe <seu-email>] ou acesse http://apoio.cits.br:8080/guest/RemoteListSummary/javabr
Veja as mensagens antigas em http://www.mail-archive.com/javabr%40cits.br/

Responder a