|
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----- compilem e executem essa classe: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 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/ |
