Atribuição de valor a variável passado por parametro em método

1 resposta
Naruffy

Pessoal,

Tenho o seguinte problema

Vejam o código
public class TestesDoErick {
    public static void main(String[] args) {
        Integer a = 1;        
        System.out.println(a);
        
        TestesDoErick t = new TestesDoErick();
        t.troca(a);
        // Porque o valor atribuido na variável a no método troca não exibido?
        System.out.println(a);
    }
    
    public void troca(Integer i) {
        i = 123;
    }
}

E o seguinte:

public class TestesDoErick {
    public static void main(String[] args) {

        R r = new R();
        r.i = 1;
        System.out.println(r.i);
        
        TestesDoErick t = new TestesDoErick();
        t.troca(r);
        // Quando o Integer é um atribudo de um objeto o valor aparece
        System.out.println(r.i);
    }
    
    public void troca(R r) {
        r.i = 123;
    }
}

class R {
    Integer i;
}

Porque no primeiro código aonde a variável é um Integer o valor não 'fica' na variável depois de atribuir no outro método, mas no segundo código fica?

Obrigado

[]s

1 Resposta

danielfigueiredoc

Porque no primeiro método você tem um valor primitivo, ou seja, o valor da váriavel está nela, quando você passa por parâmetro ela passa os valores pra outra variavel (a do método), então quando você altera o valor no primeiro método ele não muda o valor da variável do main, você você está alterando o valor da cópia dela, dentro do método.

Já no segundo você passa uma variável de referência, um objeto criado, sendo assim você passa o conjunto de bits que apontam para o objeto criado (pois variáveis de referência nunca guardam seus valores, elas possuem o endereço da onde está o objeto no heap), então quando você altera o valor no segundo método, ele altera o msm objeto de referência criado no main, pois você passou o “caminho” de onde esta o objeto, que no caso é o mesmo.

Criado 1 de outubro de 2009
Ultima resposta 1 de out. de 2009
Respostas 1
Participantes 2