В Java нет указателей, есть ссылки.
Указатель - это переменная, которая содержит адрес памяти. Обычно один разыменовывает указатель для получения памяти, необходимой для какой-либо операции.
Ссылка - это индекс в таблице управления памятью. Обычно таблица управления памятью защищена от прямого доступа. В случае Java ссылкой нельзя манипулировать вручную, так как любое чтение переменной приведет к возвращению ссылочного объекта.
Это имеет много последствий, но необходимо для достойного автоматического сбора мусора. Сборка мусора иногда включает в себя перемещение объектов в памяти для создания больших областей свободного пространства (для необходимых объектов, которые не могут поместиться в текущие дыры в памяти). Если Java предоставляет указатель, то после сжатия памяти у вас может быть «старый» адрес памяти.
При использовании ссылок ваша ссылка гарантированно останется прежней, даже если фактическое расположение памяти меняется. Внутренняя часть JVM является ссылкой на таблицу указателей, но вы никогда не увидите ее в работающей программе; потому что, если вы когда-нибудь коснетесь этого, это испортит автоматическое управление памятью.