1.1.3

Objetos versus referências em memória

Em Java, um objeto e uma referência para um objeto são conceitos distintos. O objeto representa a instância real, alocada no heap e contendo dados e comportamento. A referência é uma variável que armazena o endereço lógico desse objeto, permitindo que o código acesse a instância sem copiá-la. Entender essa diferença é essencial para compreender como a memória é utilizada e como objetos são compartilhados.

Exemplo conceitual

User user1 = new User("Alice");
User user2 = user1;

Explicação linha a linha

User user1 = new User("Alice");

Cria um objeto da classe User no heap. A variável user1 armazena uma referência que aponta para esse objeto.

User user2 = user1;

Copia a referência armazenada em user1 para a variável user2. Nenhum novo objeto é criado; ambas as variáveis apontam para a mesma instância em memória.

Alterações feitas no objeto por meio de qualquer uma das referências afetam o mesmo estado compartilhado. Esse comportamento é uma consequência direta do modelo de memória do Java e explica muitos efeitos observados ao trabalhar com objetos mutáveis.