Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Dúvida Passagem de Parâmetro

Oi pessoal, estou com duvida no código abaixo:

O resultado da execução deste código é "6 10".

Analisando o código, cheguei a conclusão de que a única maneira de chegar a este resultado seria compreender que as alterações realizadas nas variáveis dentro do método "testInts" não refletiriam nas que estão no método main.

Porém umas das variáveis enviadas é um Wrapper, ou seja um objeto, e no meu entendimento, eu não estaria enviando uma cópia do wrapper e sim sua referência, o que em tese, deveria impactar no método main.

package whiz;

public class A{

    public static void testInts(Integer obj, int var){
        obj = var++;
        obj++;
    }

    public static void main(String args[]){

        Integer val1 = new Integer(5);
        int val2 = 9;

        testInts(val1++, ++val2);
        System.out.println(val1+" "+val2);
    }

}
2 respostas
solução!

Oi Anderson

É uma excelente pegadinha. Na prova costuma aparecer de maneiras mais sutis.

Mesmo sendo wrapper, vale lembrar que o wrapper é imutável! Então alterando o valor daquele objeto na verdade é a gerado um novo objeto. A gente não vê isso por que o autoboxing/unboxing esconde um monte de coisas.

Pra ficar mais fácil de você pensar, olha 'so se o método fosse assim:

 public static void testInts(Integer obj, int var){

        Integer novo = new Integer(var++);
        obj = novo;
        obj++;
    }

Nao adianta a gente mudar a referência obj, ja que obj é uma copia da referencia (passagem por valor de referencias) que veio do main.

Muito obrigado Paulo.