В чем разница между указателем и ссылочной переменной в Java?

В моей книге Java объясняется, что для использования объектов мы можем назначить их ссылочным переменным. Как это отличается от указателя на объект? Есть ли у Java указатели?

Благодаря 🙂

Ссылка вроде как указатель, который вы не можете сделать арифметикой … хотя это более непрозрачно. Хотя базовые биты могут быть адресом в виртуальной памяти, они не обязательно должны быть. Это всего лишь способ добраться до объекта (или представления нулевого значения). Поэтому, хотя они не совсем то же самое, если вы привыкли думать о указателе как о «способе идентификации объекта или навигации к нему» (в некотором смысле), то да, эти мысли также относятся к ссылкам.

Java не имеет указателей как таковых (в отличие, скажем, от C #, который имеет ссылки и указатели – последний используется в «небезопасном» коде).

Термины «ссылка» и «указатель» в основном эквивалентны. Большая часть литературы, которую я видел об основах Java, утверждает, что Java не имеет указателей. Но если вы попытаетесь использовать null ссылку, вы получите NullPointerException . Так что это все семантика.

(Реальная разница в том, что в C или C ++ термин «указатель» строго означает целое число, которое является адресом памяти некоторых данных. В то время как в Java термин «ссылка» более точно соответствует концепции «ссылки» на C ++. работайте с адресом памяти напрямую, даже если вы хотите, но вы используете его таким же образом.)

Нет, у Java нет указателей. Основными понятиями на Java являются «ценности» и «ссылки».

Ссылка – это указатель, который обычно не может видеть значение (т. Е. Адрес памяти). Единственными разрешенными действиями являются установка его (из другой ссылки) и ссылки на него на связанный объект. Он может быть задан из ссылочного выражения, такого как новый оператор, или из другой ссылки (которая является синтаксически простым ссылочным выражением).

 Cat x = new Cat(); 

Эта строка создает объект Cat в памяти и сохраняет ссылку на него в x.

x теперь содержит ссылку на объект Cat, но если вам нужно:

 x = x + 1; 

Это не даст следующий адрес памяти, как в C, но даст ошибку компилятора. Java не позволяет управлять ссылкой или памятью.

Если мы думаем о ссылках или указателях как о способе доступа или обращения с объектом в памяти, они почти одинаковы. Однако они отличаются в плане реализации. Ниже приведены различия:

  1. Указатели поддерживают арифметику указателя, и это делает их небезопасными. Потому что они предоставляют программисту уровень доступа, который намного больше, чем необходимо. Однако ссылки предоставляют дескриптор объекта через гораздо более абстрактную скрытую реализацию.

  2. Указатели менее строго типизированы, а ссылки более строго типизированы. Под этим я подразумеваю, что код очень прост в случае ссылок и немного менее формален в случае указателей. Вы должны использовать вещи reinterpret_cast для использования указателей, а с другой стороны, ссылки поддерживают легкие отбрасывания типа примитивного типа приведения в «C».

  3. Указатели небезопасны, а ссылки безопасны. Если у вас есть опция между двумя ссылками выбора. В таких языках, как C #, у вас есть эта свобода.

  4. Указатели существуют в C / C ++, а ссылки существуют в Java. Не путайте ссылки в C / C ++ со ссылками на Java. Ссылки в C / C ++ – это своего рода синоним, используемый для rvalue указателя в C / C ++.

указатель содержит только адрес, но ссылка не содержит адрес, если мы говорим откровенно, то адрес объекта присваивается индексу, или мы говорим, что hash-код и код кода присваиваются ссылочной переменной, если мы увидим содержимое ссылочной переменной он начинается с classа Name @ и после него имеет некоторый шестнадцатеричный код. Эти nos не являются адресом, это значение индекса или хеш-код.

вторая точка, мы не можем выполнять арифметические операции над значениями. Содержание контрольного значения

  • Как я могу реализовать пользовательскую панель действий с пользовательскими кнопками в Android?
  • Пауза / остановка и запуск / возобновление Java TimerTask непрерывно?
  • NoClassDefFoundError: org / w3c / dom / ElementTraversal
  • android, что не так с openFileOutput?
  • Как удалить простыню вокруг кнопок в Android?
  • Строковый постоянный пул
  • Добавить ведущие нули в число в Java?
  • Можно ли подменять enums для добавления новых элементов?
  • Параллельная модификация Исключение: добавление в ArrayList
  • Сначала необходимо выпустить команду STARTTLS
  • Есть ли у java int.tryparse, который не генерирует исключение для плохих данных?
  • Давайте будем гением компьютера.