Comprei o livro Use a cabeça java, e nessa parte das variáveis de referência dei uma parada e vim pesquisar mais para entender bem. Então peguei um exemplo que tem um trecho que realmente não estou entendendo com funciona, fiquei confuso na verdade.
O código:
class Retangulo {
int ladoA;
int ladoB;
}
public static class TestAtribuicao {
//variável de instância
Retangulo retangulo3 = new Retangulo();
public static void main(String[] args) {
//variáveis locais
Retangulo retangulo = new Retangulo();
Retangulo retangulo2 = new Retangulo();
TestAtribuicao test = new TestAtribuicao();
//um dos objetos recebem os valores
retangulo.ladoA = 5;
retangulo.ladoB = 10;
/* retangulo2 e retangulo3 passam a
* apontar para o mesmo objeto que
* retangulo */
**retangulo = retangulo2;** // Aqui neste ponto entendo que retangulo recebe de retangulo 2
test.retangulo3 = retangulo;
/* um valor é alterado em retangulo e,
* como todas as tres variáveis apontam
* para o objeto, a alteração é vista
* por todas as tres variáveis */
retangulo.ladoA = 6;
/* a regra independe de variável local ou
* global */
**System.out.println(retangulo2.ladoA); //6** // A dúvida é como esse retangulo2 recebe 6
System.out.println(test.retangulo3.ladoA);//6
}
}
Cheguei a fazer um teste criando " retangulo2.ladoA = 8 ;"
E indicando uma saída:
retangulo = retangulo2;
System.out.println(retangulo2.ladoA);
System.out.println(retangulo.ladoA);
Neste caso imprime:
8
8
6
6
Tem a explicação no código, mas como o retangulo2 recebe o valor 6 no final que não entendi, e no que adicionei extra, tanto retangulo quanto retangulo2 recebem 8 na saída.