1.1.4

Referências em Java versus ponteiros em C

Uma referência em Java e um ponteiro em C cumprem papéis semelhantes ao permitir o acesso a dados em memória, mas operam em níveis de abstração muito diferentes. Em Java, a referência é uma abstração segura fornecida pela JVM, enquanto em C o ponteiro representa diretamente um endereço de memória que pode ser manipulado livremente pelo programador.

Exemplo conceitual

User user = new User("Alice");
int value = 10;
int* ptr = &value;

Explicação linha a linha

User user = new User("Alice");

Cria um objeto no heap e armazena, na variável user, uma referência gerenciada pela JVM. O desenvolvedor não conhece nem manipula o endereço real de memória do objeto.

int value = 10;

Declara uma variável em C e aloca memória diretamente para armazenar o valor inteiro.

int* ptr = &value;

Declara um ponteiro que armazena o endereço de memória da variável value. Esse endereço pode ser acessado, alterado ou usado em operações aritméticas.

Em Java, referências não permitem aritmética de memória, conversões diretas ou acesso a endereços brutos. Essa restrição elimina classes inteiras de erros comuns em C, como buffer overflows e acesso a memória inválida, ao custo de menor controle direto sobre a memória.