Реальная разница в том, что примитивные типы не являются ссылочными типами .
В системе типов Java ссылочные типы имеют общий root, а примитивных типов нет: все ссылочные типы являются подтипами Object
. Для сравнения, примитивные типы не имеют общего корня; каждый примитивный тип - это свой собственный особый единорог.
Это означает, что переменная, объявленная с типом Object
, может содержать значение любого ссылочного типа, но не может содержать значение какого-либо примитивного типа.
Это проблема, если вы хотите создать обычно полезные структуры данных. Подумайте, как бы вы реализовали структуру данных «динамический c массив», такую как ArrayList или Vector. Вы можете использовать массив Object[]
для хранения элементов, и это будет работать для всех ссылочных типов. Но поскольку у примитивных типов нет общего root, вам нужно будет создать отдельную реализацию для каждого примитивного типа.
Для решения этой проблемы были созданы классы-оболочки. Теперь, вместо того, чтобы требовать 8 отдельных реализаций массива Dynami c (1 для ссылочных типов и 7 для примитивных типов), вы можете заключить каждое примитивное значение в объект и просто использовать реализацию для ссылочных типов.
Примитивные типы и классы-оболочки были созданы одновременно с созданием первого дизайна и реализации Java 1.0. Дизайнеры не «повторно использовали то, что уже было доступно», потому что ничего не было доступно: они построили все с нуля.
Могли ли дизайнеры решить проблему каким-либо другим способом, возможно, создав систему типов, которая имела root как для примитивных, так и для ссылочных типов? Да, но они этого не сделали, и у них, вероятно, были веские причины: сложность реализации, простота понимания, время выхода на рынок, ...