Passando Variáveis para Métodos


Métodos podem ser declarados para receber variáveis do tipo primitiva e/ou variáveis do tipo objeto.

Passando Variáveis do Tipo Objeto

Ao passar uma variável de referência para um método, o que é passado é a referência (endereço de memória do objeto), e não o objeto em si. Ou seja, não será passado o próprio objeto e sim uma cópia do conteúdo dele (do endereço de memória). Consequentemente, os dois objetos estarão acessando o mesmo lugar na memória. Isso quer dizer que se uma propriedade for alterada em um objeto afetará o outro, já que as duas variáveis apontam pro mesmo endereço de memória (objeto).
Entretanto, há uma exceção: caso o objeto dentro do método ganhe uma nova instância, será criado um novo endereço na memória e suas mudanças não mais afetarão o objeto original.


class Retangulo {
      int ladoA;
      int ladoB
}


public class Forma {

      public static void main(String[] args) {
            Retangulo retangulo = new Retangulo();
            retangulo.ladoA = 5;
            retangulo.ladoB = 10;       
            setRetangulo(retangulo);          
            //imprime 5
            System.out.println(retangulo.ladoA);
            setRetangulo2(retangulo);
            //imprime 6
            System.out.println(retangulo.ladoA);          
      }
     
      /* um método com variável de referência como
       * parâmetro recebe o endereço de memória
       * do objeto que está sendo passado; isso
       * quer dizer que os dois passarão a referenciar
       * o mesmo objeto no heap */
      static void setRetangulo(Retangulo ret) {
            ret.ladoA = 6;
      }
     
      /* quando o parâmetro é instanciado novamente
       * ele recebe outra referência, e suas
       * alterações não mais afetarão o outro objeto*/
      static void setRetangulo2(Retangulo ret) {
            ret = new Retangulo();
            ret.ladoA = 7;
      }
     
}

Obs.: Strings são tratadas de forma diferente. Quando são passadas por parâmetro em um método, é sempre outra referência, ou seja, uma não afeta a outra.

Passando Variáveis to Tipo Primitiva

Nesse caso é feita uma cópia do valor e criada uma nova variável com esse mesmo valor. Isso quer dizer que se a nova variável receber um novo valor dentro do método não afetará a variável original.


public class Forma2 {
     
      public static void main(String[] args) {
            int valor = 3;
            setValor(valor);
            //imprime 3
            System.out.println(valor);
      }
     
      /* um método com variável primitiva como
       * parâmetro recebe o conteúdo (representação
       * em bits da literal) da variável que está
       * sendo passada; isso quer dizer que serão
       * independentes, um não afetará o outro */
      static void setValor(int v) {
            v = 10;
      }

}

Fonte: SCJP Sun Certified Programmer for Java 6 Study Guide

0 comentários:

Postar um comentário