Isso já foi muito discutido por aqui.
Veja a conversa por lá.
Basicamente, depende do que você chame de ponteiro.
O conceito do Java é mais próximo das referências do C++ do que o de ponteiros.
O conceito de ponteiros no C ou C++ é justamente isso: um endereço de memória de um dado. Você pode somar números inteiros a ele e desloca-lo. Você pode apontar para dados que não tem qualquer relação com o tipo do ponteiro em si, afinal, você não está apontando objetos, mas sim memória. Esse conceito, o Java não tem.
Já uma referência é um apelido dado a um objeto. Não se pode “somar” nada a uma referência, pois ela deve apontar um objeto válido, respeitar as regras de cast, etc. Para todos os efeitos, ela é o objeto ao qual referência.
Mas é claro, por baixo dos panos, tudo vira ponteiro. Mas acho que discussões conceituais devem se basear no conceito em torno da técnica, não em como a técnica é implementada.
Por fim, é bom ressaltar que dizer que o java tem ponteiros pode gerar um pânico injustificado. Os pepinos envolvendo ponteiros: memory leaks e dangling pointers não acontecem em Java. O garbage collector impede que um objeto apontado seja deletado, ao mesmo tempo que garante a remoção da memória de quem não tem referência nenhuma.