8.6. Aliasing

Lembre-se que o valor de uma expressão de tipo não primitivo é uma referência a um objeto. Então, quando atribuímos uma expressão de tipo não primitivo a uma variável, o valor da variável passa a ser uma referência.

É possível ter várias variáveis a referenciarem o mesmo objeto. Por exemplo, as instruções seguintes

geram um estado da memória que se pode representar assim:

As variáveis sb1 e sb2 contém o mesmo valor: uma referência para o mesmo objeto. Por outras palavras,

podemos referir-nos a este objeto de duas formas: através de sb1 e de sb2.

Quando duas variáveis referenciam o mesmo objeto, quaisquer mudanças no objeto que uma delas refere, afetam também o objeto (o mesmo!) que a outra refere, pois na verdade existe um só objeto, que é partilhado pelas duas variáveis. Por exemplo:

A primeira instrução escreve Olah! no ecrã, que é o valor correspondente ao texto guardado em sb2.

A segunda instrução invoca o método append sobre sb1, que acrescenta " Adeus." ao StringBuilder.

A terceira linha imprime Olah! Adeus. no ecrã. Todas as alterações que são feitas sobre o objeto através de sb1 afetam o objeto referenciado por sb2 (o mesmo objeto) e vice-versa.

Embora muito útil, como veremos adiante, é preciso ter cuidado com a utilização de aliasing pois rapidamente pode levar a erros e confusões.

 


 

Anterior: 8.5. Input e Output em Java

Seguinte: 8.7. null