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

Atribuição de variáveis referência (caso específico)

Olá devs,

testando mais exemplos de atribuições de variáveis referência que apontam para o mesmo objeto, me deparei com um caso não explicado no curso:

Integer x = new Integer(10);
Integer y = x;

x ++;

System.out.println("x = " + x + " e y = " + y);

Mesmo que tenha instanciado somente um objeto, curiosamente (para mim) foi impresso 2 valores diferentes: 11 e 10.

Porquê?

Obrigado.

3 respostas

Ola, Thiago Medeiros !

Boa observação !

Passo a passo:

Integer x = new Integer(10); Criou x apontando para o valor 10.

Integer y = x; Criou y apontando para o mesmo valor 10 que x também aponta.

x ++; Nesse momento x passa a apontar para o valor 11 enquanto y continua apontando para o valor 10.

Ajudei ?

Abraço !

Valeu Cristiano,

entendi, mesmo que tenha criado um objeto, as variáveis apontam para VALORES diferentes, e não para o mesmo objeto como eu esperava. Mas ainda estou com a pulga atrás da orelha, pois no curso temos um exemplo de classe que tem uma variável primitiva e este mesmo processo de instanciação e atribuição é feito, porém quando modificamos x do objeto 1, também é modificado x do objeto 2:

class Objeto {
    int var = 10;
}

public class Teste {
    public static void main(String[] args) {
        Objeto o1 = new Objeto();
        Objeto o2 = o1;
        o1.var = 11;
        System.out.println("var de o1 é = " + o1.var + " e var de o2 é = " + o2.var);
    }
}

Por que o mesmo não acontece com objetos do tipo Integer? Quando é passado o valor do inteiro na instanciação de um objeto Integer ( Integer(x) ) onde ele fica, em uma variável de objeto do Integer? Não sei se essa é a questão, mas esta diferença não ficou clara pra mim.

Desde já grato!

solução!

No caso da classe :

class Objeto {
    int var = 10;
}

Vc tem duas instancias o1 e o2.

Nesse caso qndo vc altera o valor de o1.var = 11;, você esta alterando o valor dessa propriedade do tipo int, porém as instancias de o1 e o2 continuam apontando pra outra como estavam antes.

Rode esse exemplo e debuge linha a linha para entender como uma instancia faz referencia a outra:

class Teste {

    static int i = 3;

    public static void main(String[] a) {

        Objeto o1 = new Objeto();
        Objeto o2 = o1;
        o1.var = 11;
        System.out.println("var de o1 é = " + o1.var + " e var de o2 é = " + o2.var);

        o2 = new Objeto();
        o2.var = 200;
        System.out.println("var de o1 é = " + o1.var + " e var de o2 é = " + o2.var);

    }

}

class Objeto {
    int var = 10;
}

Agora ficou mais claro ?

Abraço!