As referências podem ser implementadas pelo armazenamento do endereço. Normalmente, as referências Java serão implementadas como ponteiros, mas isso não é exigido pela especificação. Eles podem estar usando uma camada adicional de indireto para facilitar a coleta de lixo. Mas no final ele (quase sempre) se resumirá aos ponteiros (estilo C) envolvidos na implementação de referências (no estilo Java).
Você não pode fazer aritmética de ponteiros com referências. A diferença mais importante entre um ponteiro em C e uma referência em Java é que você não consegue (e manipula) o valor subjacente de uma referência em Java. Em outras palavras: você não pode fazer aritmética de ponteiros.
Em C você pode adicionar algo a um ponteiro (ou seja, o endereço) ou subtrair algo para apontar para coisas que estão "por perto" ou apontar para lugares que estão em qualquer lugar.
Em Java, uma referência aponta para uma coisa e essa coisa apenas. Você pode fazer uma variável conter uma referência diferente , mas você não pode simplesmente pedir que aponte para "a coisa depois da coisa original".
As referências são strongmente tipadas. Outra diferença é que o tipo de uma referência é muito mais rigorosamente controlado em Java do que o tipo de ponteiro em C. Em C você pode ter um int*
e convertê-lo em char*
e apenas reinterpretar a memória naquele local. Essa reinterpretação não funciona em Java: você só pode interpretar o objeto no outro extremo da referência como algo que já é (ou seja, você pode converter uma referência Object
para String
reference somente se o objeto apontado for realmente um String
).
Essas diferenças tornam os ponteiros C mais poderosos, mas também mais perigosos. Ambas as possibilidades (aritmética de ponteiro e reinterpretar os valores apontados) aumentam a flexibilidade para C e são a fonte de alguns do poder da linguagem. Mas eles são também grandes fontes de problemas, porque se usados incorretamente, eles podem facilmente quebrar as suposições de que seu código é construído. E é muito fácil usá-los incorretamente.