Referensi dapat diimplementasikan dengan menyimpan alamat. Biasanya referensi Java akan diimplementasikan sebagai pointer, tetapi itu tidak diperlukan oleh spesifikasi. Mereka mungkin menggunakan lapisan tipuan tambahan untuk memungkinkan pengumpulan sampah lebih mudah. Tetapi pada akhirnya itu akan (hampir selalu) bermuara pada pointer (gaya-C) yang terlibat dalam implementasi referensi (gaya Jawa).
Anda tidak dapat melakukan aritmatika pointer dengan referensi. Perbedaan paling penting antara pointer di C dan referensi di Java adalah bahwa Anda tidak bisa benar-benar mendapatkan (dan memanipulasi) nilai yang mendasari referensi di Java. Dengan kata lain: Anda tidak dapat melakukan pointer aritmatika.
Dalam C Anda dapat menambahkan sesuatu ke pointer (yaitu alamat) atau mengurangi sesuatu untuk menunjuk ke hal-hal yang "dekat" atau arahkan ke tempat-tempat yang ada di tempat mana pun .
Di Jawa, referensi menunjuk ke satu hal dan hanya itu. Anda dapat membuat variabel memiliki referensi yang berbeda , tetapi Anda tidak bisa hanya memintanya untuk menunjuk ke "hal setelah hal yang asli".
Referensi sangat diketik. Perbedaan lainnya adalah bahwa jenis referensi jauh lebih ketat dikendalikan di Jawa daripada jenis pointer di C. Di C Anda dapat memiliki int*
dan melemparkannya ke char*
dan hanya menafsirkan kembali memori di lokasi itu. Penafsiran ulang itu tidak berfungsi di Jawa: Anda hanya bisa menginterpretasikan objek di ujung referensi lain sebagai sesuatu yang sudah ada (yaitu Anda dapat melemparkan Object
referensi ke String
referensi hanya jika objek yang ditunjuk sebenarnya a String
).
Perbedaan itu membuat pointer C lebih kuat, tetapi juga lebih berbahaya. Kedua kemungkinan tersebut (pointer aritmatika dan menafsirkan kembali nilai-nilai yang ditunjukkan) menambah fleksibilitas untuk C dan merupakan sumber dari beberapa kekuatan bahasa. Tetapi mereka juga merupakan sumber masalah besar, karena jika digunakan secara tidak benar mereka dapat dengan mudah mematahkan asumsi bahwa kode Anda dibangun. Dan cukup mudah untuk menggunakannya secara salah.