Sobre referências, ponteiros e Java.

Referências são objetos (no sentido amplo) contendo informação a cerca de informação armazenada em outro local, ou seja, não contêm a informação em si, mas apenas o endereço da mesma. Nesse caso, pode-se acessar a informação referenciada  fazendo o que se chama de “dereferencing“, ou, desreferenciação.

Já um ponteiro, é uma implementação simples de um tipo de dados genérico referência. Em muitas linguagens é implementado através de variáveis que apontam para outras variáveis. Ou seja, que têm o endereço de memória de outra variável.

Variáveis possuem nomes, endereços e conteúdos. Quando se conhece o nome da variável, pode-se acessá-la através do nome. Eventualmente, possuímos apenas o endereço de uma variável e, para acessá-la, precisamos utilizar os ponteiros. Obter ou requisitar o valor para o qual o ponteiro referencia é a desrefenrenciação do ponteiro.

A linguagem Java é fortemente tipificada, o que quer dizer que toda variável e toda expressão nessa linguagem deve ter um tipo conhecido em tempo de compilação. Os tipos de Java são classificados em dois grandes grupos: tipos primitivos e tipos referência. Os tipos primitivos são boolean e os tipos numéricos: byte, short, int, long, char, float e double. E os tipos referência são os tipos class, interface e array. E existe um tipo especial, chamado de tipo null (nulo). Os tipos referência são assim denominados porque seus valores são referências para objetos (sentido estrito). No entanto, as desreferenciações em Java são sempre implícitas.

Analisando a linguagem Java, veremos que além de não termos desreferenciações explícitas, não existe o tipo de dados ponteiro (ou como alguns colocam, não há ponteiro explícito em Java).
Em Java, por exemplo, o programador não manipula apontadores, não é capaz de realizar aritmética de apontador, não é capaz de realizar liberação explícita de memória (o coletor de lixo, “garbage collector”, é utilizado para isso) e também não há referências ambíguas.
Para finalizar, sempre vale lembrar, que referências não são a mesma que coisa que ponteiros.

Guilherme Mesquita.

»crosslinked«

Você pode gostar...

2 Resultados

  1. Marcia disse:

    O que vc considera referência ambígua?

  2. Eduardo Costa disse:

    Um colega me mandou o link para seu post. Devo dizer que me agrada ver alguém que não tem esse pensamento arcaico de achar que referências são ponteiros sem o “asterisco” e o “E comercial”.
    Afinal, se as referências em Java fossem ponteiros, elas apontariam para que parte da classe? Os atributos, os métodos, a constant-pool?
    Aliás, se apontasse para um endereço de memória, seria fácil, via programação bytecode, criar vírus que usassem os tais “ponteiros” indevidamente.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *