Посилання можуть бути реалізовані, зберігаючи адресу. Зазвичай посилання на Java будуть реалізовуватися як покажчики, але це не вимагається специфікацією. Вони можуть використовувати додатковий шар непрямості для полегшення збору сміття. Зрештою, він (майже завжди) зводиться до покажчиків (у стилі С), які беруть участь у впровадженні посилань (у стилі Java).
Ви не можете робити арифметику вказівника з посиланнями. Найважливіша відмінність між вказівником на C і посиланням на Java полягає в тому, що ви фактично не можете дістати (і маніпулювати) базовим значенням посилання на Java. Іншими словами: ви не можете робити арифметику вказівника.
В C ви можете додати щось до вказівника (тобто адреси) або субстратувати щось, щоб вказати на речі, які знаходяться "поблизу" або вказати на місця, які є в будь-якому місці.
У Java посилання вказує лише на одне і на це. Ви можете зробити змінну утримувати іншу посилання, але ви не можете просто попросити її вказати на "річ після оригінальної речі".
Список літератури сильно набраний. Ще одна відмінність полягає в тому, що тип посилання набагато суворіше керується на Java, ніж тип вказівника знаходиться в C. У C ви можете мати int*
та передавати його на a char*
та просто повторно інтерпретувати пам'ять у цьому місці. Ця повторна інтерпретація не працює в Java: ви можете інтерпретувати об'єкт лише на іншому кінці посилання як те, що воно вже є (тобто ви можете Object
подавати String
посилання лише для того, якщо об’єкт, на який вказували, насправді є String
).
Ці відмінності роблять покажчики С більш потужними, але й більш небезпечними. Обидві ці можливості (арифметична вказівка та повторна інтерпретація значень, на які вказують) додають гнучкості до C і є джерелом певної сили мови. Але вони також є великими джерелами проблем, тому що при неправильному використанні вони можуть легко порушити припущення, що ваш код побудований навколо. І використовувати їх досить просто неправильно.