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.