O que acontece � que quando passamos por parametro em Java uma vari�vel de
um tipo primitivo, o java passa apenas uma c�pia do valor da vari�vel para o
m�todo, a� quando voce altera o valor da vari�vel dentro do m�todo, voce
est� alterando apenas uma c�pia local que n�o ir� se refletir para fora do
m�todo. J� quando voce passa um objeto, e um vetor em ultima instancia
tambem � um objeto, voc� na verdade passa uma c�pia da referencia em mem�ria
daquele objeto, portanto quando voce altera o "valor" do objeto dentro de um
m�todo, voce est� mandando o conteudo daquela referencia em mem�ria mudar, o
que no fim das contas e para efeitos praticos � o mesmo que passar o
parametro por referencia, ou seja, o valor � refletido externamente, quando
o m�todo encerrar.
No exemplo que voce passou, quando o m�todo change_i em 1 acaba, o mesmo �
desempilhado e o i interno morre junto sendo que o i externo n�o enxerga as
mudan�as, enquanto no 2, as mudan�as s�o efetivas, mesmo quando o m�todo
acaba.

Eliade Filho

-----Mensagem original-----
De: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]]
Enviada em: quarta-feira, 8 de janeiro de 2003 09:12
Para: [EMAIL PROTECTED]
Assunto: [cejug-discussao] Language Fundamentals


Como os dois programs abaixo, basicamente o mesmo, retorna valores
diferentes
?
Desculpem-me a inocencia !!!

1) Este programa retorna 1. Aqui tudo bem, mas veja o 2)
public class example {
   int i = 0;
   public static void main(String args[]) {
      int i = 1;
      change_i(i);
      System.out.println(i);
   }
   public static void change_i(int i) {
      i = 2;
      i *= 2;
   }
}

2) Este programa retorna 4 ?
public class example {
   int i[] = {0};
   public static void main(String args[]) {
      int i[] = {1};
      change_i(i);
      System.out.println(i[0]);
   }
   public static void change_i(int i[]) {
      i[0] = 2;
      i[0] *= 2;
   }
}



-------------------------------------------------------------------------------------------

Ceara' Java User Group

  Para cancelar sua assinatura, envie um e-mail para: [EMAIL PROTECTED]
  Para mais informacoes, mande um e-mail para: [EMAIL PROTECTED]
  Falar com o administrador? e-mail para: [EMAIL PROTECTED] 
 

Responder a