Все ссылочные переменные имеют одинаковый размер, да.Это несколько косвенно рассматривается в спецификации JVM в нескольких местах: §2.2 :
Как и язык программирования Java, виртуальная машина Java работает с двумя типами типов: примитивные типы и ссылочные типы .Соответственно, есть два вида значений, которые могут храниться в переменных, передаваться как аргументы, возвращаться методами и обрабатываться: примитивные значения и ссылочные значения .
(их выделение)
и §2.6.1 :
Одна локальная переменная может содержать значениетипа boolean
, byte
, char
, short
, int
, float
, reference
или returnAddress
.Пара локальных переменных может содержать значение типа long
или double
.
(мой акцент)
Как видите, хотяон вызывает вещи, которые имеют различия в размере (int
, хранящиеся в одной переменной JVM, например, long
, хранящиеся в паре переменных JVM), есть только один вид ссылки, который подходит для одной переменной JVM.(Переменная JVM - это не то же самое, что переменная на уровне исходного кода Java, хотя, очевидно, они тесно связаны.)
В комментарии вы сказали:
Я получил общее представление, потому что ссылка на ArrayList будет иметь больше функциональности, чем ссылка на Список ...
Это источник вашего недопонимания.Функциональность и т. Д. Не содержится в ссылке , она содержится в реализации (классе), связанной с тем, что ссылка относится к (объекту).Например:
List<String> list = new ArrayList<>();
, который объявляет переменную типа List
(универсальные помахивания от руки) , которая ссылается на экземпляр ArrayList
, который является объектом со связаннымреализация (класс ArrayList
).Ссылка - это просто что-то, указывающее JVM, где объект находится в памяти, и ничего более.Вы можете думать о нем как о числе, однозначно идентифицирующем объект (или даже, если хотите, как адрес памяти, хотя это сложнее, чем это), хотя вы никогда не можете напрямую взаимодействовать с номером (адресом).Реализация (класс) не дублируется для каждого объекта (например, данные о состоянии объекта, но не методы, которые он использует), но даже если бы это было так, то дублирования не было бы в ссылка на объект, он будет находиться в самом объекте.List
объектов нет, потому что List
- это интерфейс.Есть только ArrayList
объекты, LinkedList
объекты и т. Д.