Mostrando postagens com marcador Passando Variáveis para Métodos. Mostrar todas as postagens
Mostrando postagens com marcador Passando Variáveis para Métodos. Mostrar todas as postagens

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