Я думаю, что часть cleverly
относится к тому факту, что ссылочный тип обычно называется pointer
, что заставляет читателя выучить два термина.В терминологии JVM для этого просто используется термин reference
.
Существует также исторический контекст.
Когда была представлена Java, ее крупнейшим конкурентом был C ++.Главная проблема C ++ заключалась в том, что это было сочтено слишком сложным.Изначально Java позиционировала себя как легкую альтернативу C ++.У него был синтаксис, очень близкий к C ++, но все сложные вещи (перегрузка операторов, шаблоны, множественные механизмы передачи) и т. Д. Были удалены из языка.
И вот теперь подвох ...
Java изначально продавалась как без указателей .Обоснованием для этого было то, что указатели считались самой сложной вещью в C ++, поэтому, если бы в Java их не было, это должен был быть более простой язык.
Таким образом, приходит часть умная от простого изобретения другого термина для «указателя».Называйте их ссылками, и вы можете утверждать, что в Java нет указателей (но есть ссылки).
Это привело к многочисленным дискуссиям и вызвало много путаницы, особенно потому, что в C ++ уже использовался термин «ссылка» и он используетсядля чего-то другого (хотя концептуально немного связанного).Дискуссия обычно сосредоточена вокруг двух лагерей, где один из них утверждает, что в Java действительно нет указателей, так как вы не можете выполнять арифметику с ними, и они не представляют непосредственно адреса памяти, в то время как другие лагеря утверждают, что у вас нетуметь делать арифметику с указателем, чтобы называть его указателем.
Иными словами, было ли умным использовать термин reference
, все еще открыт для обсуждения.