Adresler saklanarak referanslar uygulanabilir. Genellikle Java referansları imleç olarak uygulanır, ancak şartname gerektirmez. Çöplerin daha kolay toplanabilmesi için ek bir indirme katmanı kullanıyor olabilirler. Fakat sonunda (neredeyse her zaman) (Java tarzı) referansların uygulanmasında yer alan (C tarzı) işaretçilere kaybolacak.
İşaretçilerle aritmetik işlemleri referanslarla yapamazsınız. C'deki bir işaretçi ile Java'daki bir referans arasındaki en önemli fark, Java'daki bir referansın temel değerini gerçekten alamamanız (ve değiştirememeniz). Başka bir deyişle: işaretçi aritmetik yapamazsınız.
C'de bir işaretçiye (yani adres) bir şey ekleyebilir veya "yakındaki" şeyleri veya herhangi bir yerdeki yerleri gösterecek bir şeyi çıkarabilirsiniz .
Java'da referans bir şeye ve sadece o şeye işaret eder. Bir değişkeni farklı bir referansta tutabilirsiniz , ancak sadece "orijinal şeyden sonraki şeyi" göstermesini isteyemezsiniz.
Referanslar kesinlikle yazılmıştır. Bir başka fark, bir referans türü olmasıdır kadar bir olabilir bir işaretçi türü C olarak C'de bir daha daha sıkı Java kontrollü int*
ve onu at char*
ve sadece bu konumdaki hafızayı yeniden yorumlamak. Yani yeniden yorumlanması Java çalışmaz: Eğer sadece bir şey olarak referans diğer ucundaki nesneyi yorumlayabilir zaten (bir yayınlayabileceğim yani Object
başvurusunu String
başvuru yalnızca nesne işaret etmek aslında bir olduğunu String
).
Bu farklılıklar C işaretçilerini daha güçlü, aynı zamanda daha tehlikeli hale getirir. Bu olasılıkların her ikisi de (işaretçi aritmetik ve işaret edilen değerlerin yeniden yorumlanması) C'ye esneklik katar ve dilin gücünün bir kısmının kaynağıdır. Ancak bunlar aynı zamanda büyük sorun kaynaklarıdır, çünkü yanlış kullanılırsa, kodunuzun etrafta oluşturulduğu varsayımlarını kolayca çözebilirler. Ve onları yanlış kullanmak oldukça kolaydır.