Sérgio,
Procure no google sobre “pointer definition c”.
Você vai encontrar a seguinte definição, citada em diversas páginas, diversas vezes:
“A pointer is a special kind of variable in C and C++ that holds the address of another variable”
Ou então:
“A pointer is a variable containing the address of another variable.”
Note que as definições tratam exclusivamente de encarar a variável como um endereço. O valor apontado por esse endereço é um efeito colateral disso. Mas a definição está tratando de endereçamento, não dos valores. Daí o por que de fazer sentido arimética de ponteiros. Programadores encaram somas e subtrações como mudanças nesse endereço.
A questão aqui é o conceito.
Referência é um tipo de ponteiro? Claro que sim. Mas um novo nome foi criado porque, se você fizer a mesma googlada para a definição de referência, vai ver que:
“In C++, a reference is a restricted type of pointer.”
“C++ references are often called aliases, since they do not allow address manipulation.”
Agora, porque separar em dois conceitos? Simplesmente porque pointers podem sofrer aritmética e porque pointers são mais inseguros de se usar do que as referências. Mas referências são ponteiros, então você também não está errado em dizer que java tem ponteiros. Mas a resposta assim fica incompleta, pois os ponteiros java são referências.
Além do que, quem geralmente pergunta está, na realidade, expressando um medo. Existe uma segunda pergunta velada: “Voltarei a ter pesadelos com ponteiros em java?”
Como eu venho repetindo direto, não. Os mecanismos de java previnem isso. Além do mais, todos os ponteiros de java são referências. E todo programador C++ sabe que referências são “ponteiros do bem”, que quase nunca apontam para posições inválidas, e que tem até uma sintaxe legalzinha. São só apelidos para objetos, não coisas sombrias e negras que podem estar apontando para qualquer lugar da memória, seja ele calculado ou não.
É por isso que eu digo: Não, java não implementa o conceito de ponteiros, mas apenas o de referência. Em momento nenhum, estou deixando de dizer que as referências usam ponteiros.
O conceito puro e simples de “uma variável que contém um endereço de memória”, não existe em Java.